index.lxp@lxpwrap=x5679_252ehtm.htm
来自「GUI Programming with Python」· HTM 代码 · 共 283 行
HTM
283 行
<table border="0" cellspacing="0" cellpadding="3" width="100%"><tr><td> <div align="center" id="bldcontent"> <a href="../default.htm"><img src="../images/opendocs.png" width="63" height="76" border="0"></a> <br> <div class="symbol">Your OpenSource Publisher™</div> </div> </td></tr></table> <div align="center" class="author"> <a href="../products.lxp">Products</a> | <a href="../wheretobuy.lxp">Where to buy</a> | <a href="../bookstore.lxp">Retailers</a> | <a href="../faq.lxp">FAQ</a> | <a href="../writeforus.lxp">Write for Us.</a> | <a href="#contact">Contact Us.</a> </div> <table border="0" cellspacing="3" cellpadding="0" width="100%"><tr><td width="100%"> <div class="content"> <table border="0" cellspacing="2" cellpadding="0" width="100%"><tr><td width="100%"> <div align="center"><H4 CLASS="AUTHOR"><A NAME="AEN5">Boudewijn Rempt</A><br><a href="../../https@secure.linuxports.com/opendocs/default.htm"><img src=odpyqt125.png></a><br>ISBN: 0-97003300-4-4<br><a href="../../https@secure.linuxports.com/opendocs/default.htm">Available from bookstores everywhere or you can order it here.</a><p>You can download the source files for the book <a href="pyqtsrc.tgz">(code / eps) here.</a><hr></div> <HTML><HEAD><TITLE>A row of split windows</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.72"><LINKREL="HOME"TITLE="GUI Programming with Python: QT Edition"HREF="book1.htm"><LINKREL="UP"TITLE="User Interface Paradigms"HREF="c5584.htm"><LINKREL="PREVIOUS"TITLE="Back to the MDI windows"HREF="x5657.htm"><LINKREL="NEXT"TITLE="A stack of documents"HREF="x5700.htm"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">GUI Programming with Python: QT Edition</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><A accesskey="P" href="index.lxp@lxpwrap=x5657_252ehtm.htm">Prev</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">Chapter 16. User Interface Paradigms</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><A accesskey="N" href="index.lxp@lxpwrap=x5700_252ehtm.htm">Next</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1">A row of split windows</A></H1><P>We'll make a little viewmanager class will arrange the views separated by splitter bars. That class will be based on the <TTCLASS="CLASSNAME">QSplitter</TT> class. I would advise you never to use a splitter to separate documents (in contrast to BlackAdder, which does use this paradigm) — it's so uncommon that people will get confused. Building the class is a useful little introduction to <TTCLASS="CLASSNAME">QSplitter</TT>, though. A splitter is best used if you have a list of items or icons on the left, and a document pane to the right. Indeed, you might want to use one of the other arrangements for showing more than one window in the document pane, and separate the workspace from a selection list using a <TTCLASS="CLASSNAME">QSplitter</TT>. If you do this, the selection list functions as a kind of always-visible windows menu.</P><PRECLASS="PROGRAMLISTING">"""splitspace.py - splitter view manager for the mdi frameworkcopyright: (C) 2001, Boudewijn Remptemail: boud@rempt.xs4all.nl"""from qt import *from resources import TRUE, FALSEclass SplitSpace(QSplitter): def __init__(self, *args): apply(QSplitter.__init__,(self, ) + args) self.views=[] def addView(self, view): self.views.append(view) </PRE><P>Clever and clean as Qt might be, it is not immune to the inevitable inconsistencies caused by prolonged development. Some classes, such as the <TTCLASS="CLASSNAME">QTabWidget</TT> we saw above, have special insert or add methods for the insertion or addition of child widgets; others, like <TTCLASS="CLASSNAME">QWorkspace</TT> take care of their children if those children are created with them as the parent. This also holds for <TTCLASS="CLASSNAME">QSplitter</TT> — create a widget with a <TTCLASS="CLASSNAME">QSplitter</TT> object as a parent, and it will be automatically managed by the splitter. Therefore the <TTCLASS="FUNCTION">addView()</TT> function has little to do.</P><PRECLASS="PROGRAMLISTING"> def removeView(self, view): pass def activeWindow(self): for view in self.views: if view.hasFocus(): return view return self.views[0] </PRE><P>In order to be able to figure out which of the widgets managed by the splitter is the currently active one, we have to loop over the list and retrieve the one with focus. If that fails, we fall back on a hack: just return the first one.</P><PRECLASS="PROGRAMLISTING"> def cascade(self): pass def tile(self): pass def canCascade(self): return FALSE def canTile(self): return FALSE </PRE><P>Obviously, cascading nor tiling is relevant for this class.</P></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><A accesskey="P" href="index.lxp@lxpwrap=x5657_252ehtm.htm">Prev</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><A accesskey="H" href="index.lxp@lxpwrap=book1_252ehtm">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><A accesskey="N" href="index.lxp@lxpwrap=x5700_252ehtm.htm">Next</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">Back to the MDI windows</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><A accesskey="U" href="index.lxp@lxpwrap=c5584_252ehtm.htm">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">A stack of documents</TD></TR></TABLE></DIV></BODY></HTML> </td> </tr> </table> </td> </tr> </table>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?