![](/img/trans.png)
[英]PyQt5: How to Resize mainwindow to fit a Stackedwidget or Stackedlayout
[英]PyQt5 MainWindow resize() call not working
我有一个 PyQt5 GUI 应用程序主窗口,它根据屏幕大小设置几何。 当我调用toogleLogWindow()
函数时, toogleLogWindow()
的可见性属性hLayoutWidget_error
发生变化,但不会发生窗口大小调整。 当我通过单击右上角的恢复按钮手动恢复主窗口时,调整大小功能起作用。 谁能帮助我理解这种行为? 默认情况下不检查actionToggleLogWindow
状态。
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUI()
def setupUI(self):
# Set screen size parameters
for i in range(QApplication.desktop().screenCount()):
self.window_size = QApplication.desktop().availableGeometry(i).size()
self.resize(self.window_size)
self.move(QPoint(0, 0))
self._button = QtWidgets.QPushButton(self)
self._button.setText('Test Me')
self._editText = QtWidgets.QComboBox(self)
self._editText.setEditable(True)
self._editText.addItem("")
self._editText.setGeometry(QtCore.QRect(240, 40, 113, 21))
# Connect signal to slot
self._button.clicked.connect(self.toogleLogWindow)
def toogleLogWindow(self):
if self._editText.currentText() == "0":
h = self.window_size.height()
w = int(self.window_size.width()/2)
self.resize(w,h)
elif self._editText.currentText() == "1":
h = self.window_size.height()
w = int(self.window_size.width())
self.resize(w,h)
else:
pass
def get_main_app(argv=[]):
app = QApplication(argv)
win = MainWindow()
win.show()
return app, win
def main():
app, _win = get_main_app(sys.argv)
return app.exec_()
if __name__ == '__main__':
sys.exit(main())
应当指出的是:
似乎如果在显示之前设置窗口的最大大小然后显示它就相当于最大化窗口。
当窗口最大化时,除非您将其返回到以前的状态,否则您无法更改其大小,例如,如果您手动更改窗口的大小,直到它处于正常状态,那么您只需更改大小即可。
因此,对于这种情况,有几种替代方案:
不要设置屏幕的全尺寸:
self.window_size = QApplication.desktop().availableGeometry(i).size() - QSize(10, 10)
显示后设置大小:
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setupUI() def setupUI(self): # Set screen size parameters for i in range(QApplication.desktop().screenCount()): self.window_size = QApplication.desktop().availableGeometry(i).size() self._button = QPushButton(self) self._button.setText("Test Me") self._editText = QComboBox(self) self._editText.setEditable(True) self._editText.addItem("") self._editText.setGeometry(QRect(240, 40, 113, 21)) # Connect signal to slot self._button.clicked.connect(self.toogleLogWindow) def init_geometry(self): self.resize(self.window_size) self.move(QPoint(0, 0)) def toogleLogWindow(self): if self._editText.currentText() == "0": h = self.window_size.height() w = int(self.window_size.width() / 2) self.resize(w, h) elif self._editText.currentText() == "1": h = self.window_size.height() w = int(self.window_size.width()) self.resize(w, h) else: pass def get_main_app(argv=[]): app = QApplication(argv) win = MainWindow() win.show() win.init_geometry() return app, win
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.