2012-12-05 8 views
5

Çok fazla QDockWidgets ve merkezi widget olmadan bir uygulamanız var. Bu QDockWidgets başlangıç ​​boyutundan bazılarını ayarlamak istiyorum (uygulamanın başlangıcındaki boyut), ancak min/maks boyutlarını sınırlamak istemiyorum.Uygulamada QDockWidget başlangıç ​​(varsayılan) boyutu merkezi widget (PyQt4) olmadan nasıl ayarlanır?

Nasıl yapmalı? Örneğin, ilk boyut 150x75'i bunlardan birine ayarlamanız gerekiyor. Belli başlı yöntemleri denedim (örneğin, eklenti aygıtı içeriğine ilişkin QWidget.Resize() gibi), ama hiç işe yaramadı.

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' her zaman merkezi bir widget'a sahip olmalı, ancak boyutunu 0 olarak ayarlamayı deneyebilirsiniz. – alexisdm

+0

@alexisdm, nasıl yapılmalı? Bana yardımcı olabilecek bir kod gönderebilir misiniz? Teşekkür ederim! –

+0

Örneğin, mw.setCentralQWidget (QWidget()) 've' mw.centralWidget(). SetFixedSize (0,0) 'ile. [Bu soru] (http://stackoverflow.com/q/10067821/894321), merkezi pencere aracını ayarlamadan yapabileceğiniz sorunları gösterir. – alexisdm

cevap

7

dockwidgets ana pencerenin düzeni dahil edilecektir, bu yüzden onları göz ardı edilecektir yeniden boyutlandırmak için herhangi bir girişim:

İşte durumunun basitleştirilmiş bir modeldir.

bunun için standart bir çözüm içerik widget bir alt sınıfını oluşturup yeniden uygulamaya onun 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) 

Ancak, bu yalnızca ayrıca dikkatle diğer dockwidgets boyutlarını yönetmek ölçüde çalışacak . Ve elbette ana pencereyi en üst düzeye çıkarmak da nihai sonuç üzerinde bir etkiye sahip olacaktır.

Ayrıca, dockwidgets'larınızın başlangıç ​​durumunu yönetmek için QMainWindow.saveState ve QMainWindow.restoreState kullanmayı düşünebilirsiniz.

0

fixedSize işlevini setFixedWidth/setFixedHeight olarak kullanın.

+0

Bu, tam olarak o boyuta sahip widget'i içerir; Orijinal poster, yalnızca varsayılan boyutta, ayarlanacak minimum ve maksimum boyut değil. – RolKau