2012-12-05 39 views
5

मेरे पास QDockWidgets और केंद्रीय विजेट के बिना बहुत कुछ ऐप है। मैं उन QDockWidgets प्रारंभिक आकार (एप्लिकेशन की शुरुआत में आकार) सेट करना चाहता हूं, लेकिन मैं उनके न्यूनतम/अधिकतम आकार को सीमित नहीं करना चाहता हूं।कोई केंद्रीय विजेट (PyQt4) वाले ऐप में QDockWidget प्रारंभिक (डिफ़ॉल्ट) आकार कैसे सेट करें?

यह कैसे करें? उदाहरण के लिए, मुझे प्रारंभिक आकार 150x75 उनमें से एक को सेट करने की आवश्यकता है। मैंने स्पष्ट विधियों की कोशिश की (जैसे QWidget.Resize() डॉक विजेट सामग्री से संबंधित), लेकिन यह बिल्कुल काम नहीं करता था।

from PyQt4 import QtCore, QtGui 

app = QtGui.QApplication(['']) 

mw = QtGui.QMainWindow() # mw = MainWindow 
mw.setCentralWidget(None) 
mw.showMaximized() 

mw.dockWdg1 = QtGui.QDockWidget(mw) 
mw.content1 = QtGui.QTreeWidget() 
mw.dockWdg1.setWidget(mw.content1) 
mw.addDockWidget(QtCore.Qt.DockWidgetArea(2), mw.dockWdg1) 
mw.dockWdg1.setWindowTitle("1st dock widget") 

mw.dockWdg2 = QtGui.QDockWidget(mw) 
mw.content2 = QtGui.QTreeWidget() 
mw.dockWdg2.setWidget(mw.content2) 
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg2) 
mw.dockWdg2.setWindowTitle("2nd dock widget") 

mw.dockWdg3 = QtGui.QDockWidget(mw) 
mw.content3 = QtGui.QTreeWidget() 
mw.dockWdg3.setWidget(mw.content3) 
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg3) 
mw.dockWdg3.setWindowTitle("3rd dock widget") 

mw.show() 
app.exec_() 
+1

'QMainWindow' हमेशा एक केंद्रीय विजेट होना चाहिए लेकिन आप इसका आकार 0 – alexisdm

+0

@alexisdm पर सेट करने का प्रयास कर सकते हैं, ठीक है, यह कैसे करें? क्या आप कृपया कुछ कोड पोस्ट कर सकते हैं जो मेरी मदद कर सकते हैं? धन्यवाद! –

+0

उदाहरण के लिए, 'mw.setCentralQWidget (QWidget()) 'और' mw.centralWidget()। SetFixedSize (0,0) '। [वह सवाल] (http://stackoverflow.com/q/10067821/894321) केंद्रीय विजेट को सेट किए बिना आप की तरह की समस्याओं को दिखाता है। – alexisdm

उत्तर

7

dockwidgets मुख्य विंडो के लेआउट में शामिल किया जाएगा, इसलिए आकार बदलने के लिए उन्हें नजरअंदाज कर दिया जाएगा किसी भी प्रयास:

यहाँ स्थिति का एक सरलीकृत मॉडल है।

इस के लिए मानक वैकल्पिक हल सामग्री विजेट का एक उपवर्ग बना सकते हैं और reimplement है अपने sizeHint:

class TreeWidget(QtGui.QTreeWidget): 
    def sizeHint(self): 
     return QtCore.QSize(150, 75) 

mw.dockWdg2 = QtGui.QDockWidget(mw) 
mw.content2 = TreeWidget() 
mw.dockWdg2.setWidget(mw.content2) 

हालांकि, यह केवल इस हद तक कि आप भी ध्यान से अन्य dockwidgets के आकार का प्रबंधन करने के लिए काम करेंगे । और निश्चित रूप से मुख्य खिड़की को अधिकतम करने के अंतिम परिणाम पर भी असर पड़ता है।

आप अपने डॉकविड्ज की प्रारंभिक स्थिति को प्रबंधित करने के लिए QMainWindow.saveState और QMainWindow.restoreState का उपयोग करने पर भी विचार करना चाहेंगे।

0

setFixedWidth/setFixedHeight के रूप में, निश्चित आकार फ़ंक्शन का उपयोग करें।

+0

यह विजेट को बिल्कुल उस आकार में रखता है; मूल पोस्टर केवल डिफ़ॉल्ट आकार चाहता था, न्यूनतम और अधिकतम आकार सेट नहीं होना चाहिए। – RolKau