2015-08-14 245 views
1

在主窗口中,我有一個具有自然大小的中央控件,我想將它初始化爲這個大小。但是,我不希望它被固定到這個尺寸;用戶應該能夠縮小或擴大它。如何在PyQt中設置大於屏幕2/3rd的控件的初始大小

Qt documentation指出:

注:頂層窗口部件的大小被限制到 桌面的高度和寬度的2/3。如果 這些界限不夠,您可以手動調整()該小部件。

但我無法按照規定使用resize方法。

下面的最小例子說明了這個問題:如果由wh給出的寬度和高度小於屏幕2/3的寬度和高度,則窗口獲得預期的大小。如果它們更大,窗口的大小會被截斷。

#!/usr/bin/env python 
from PyQt4 import QtCore, QtGui 
import sys 
w = 1280; h = 720 
app = QtGui.QApplication (sys.argv [1:]) 
frm = QtGui.QFrame() 
frm.sizeHint = lambda: QtCore.QSize (w, h) 
win = QtGui.QMainWindow() 
win.setCentralWidget (frm) 
win.show() 
sys.exit (app.exec_()) 
+0

對C++庫的猴子修補方法很少有效。您是否嘗試過使用子類來覆蓋'sizeHint'方法? –

+0

@three_pineapples'sizeHint'已成功添加到對象;如果寬度和高度小於屏幕的2/3,則小部件將獲得正確的大小。 (該限制在Qt中進行了硬編碼) – RolKau

回答

2

這應該爲你做我認爲

from PyQt4 import QtCore, QtGui 
import sys 
w = 2280; h = 1520 
app = QtGui.QApplication (sys.argv [1:]) 
frm = QtGui.QFrame() 
#frm.sizeHint = lambda: QtCore.QSize (w, h) 
win = QtGui.QMainWindow() 
win.setCentralWidget (frm) 
win.resize(w, h) 
win.show() 
sys.exit (app.exec_()) 
+0

這設置了窗口的客戶區域,不包括窗口管理器的裝飾,但是如果還有其他小部件,它們也包含在這個尺寸中。例如,如果我添加'win.statusBar().showMessage('Hello,World!')這一行,那麼中央部件的尺寸小於指定尺寸。 – RolKau

+0

我當然可以'win.resize(w,h + win.statusBar()。size().height())'來適應我可能在主窗口中使用的所有其他窗口小部件,但我希望減少繁瑣的解決方案。 – RolKau

1

以上答案是蠻好的,只是QApplicationQFrameQMainWindow在官方PyQt5QtGui一部分。他們是QtWidgets的一部分。

from PyQt5.QtWidgets import QApplication, QMainWindow, QFrame 

w = 900; h = 600 
app = QApplication (sys.argv [1:]) 
frm = QFrame() 
#frm.sizeHint = lambda: QtCore.QSize (w, h) 
win = QMainWindow() 
win.setCentralWidget (frm) 
win.resize(w, h) 
win.show() 
sys.exit (app.exec_()) 
相關問題