PyQt5 MainWindow resize()调用不起作用



我有一个PyQt5 GUI应用程序主窗口,它根据屏幕大小设置几何图形。当我调用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
    

最新更新