【问题标题】:PyQt5 MainWindow resize() call not workingPyQt5 MainWindow resize() 调用不起作用
【发布时间】:2021-07-21 22:15:20
【问题描述】:

我有一个 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())

【问题讨论】:

  • 已添加。对于组合框中的值“0”,除非窗口恢复,否则调整大小不起作用

标签: python pyqt5


【解决方案1】:

需要注意的是:

  • 如果在显示之前设置一个窗口的最大尺寸然后显示就相当于最大化窗口。

  • 当窗口最大化时,除非您将其返回到以前的状态,否则您无法更改其大小,例如,如果您手动更改窗口的大小直到它处于正常状态,那么您可以只更改大小。

所以这种情况有几种选择:

  • 不要设置全屏:

    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
    

【讨论】:

  • 谢谢@eyllanesc。我尝试了这两种方法。如果我减去 `QSize(100,100)`,第一个有效,而第二个无效,直到我先手动调整窗口大小。我认为减去 QSize(10, 10) 不起作用,因为我在 VM 上运行我的应用程序并且可用的桌面区域小于总屏幕区域。
  • @sa_penguin 在 Linux 上它适用于我。如果您使用的是虚拟机,那么它可能会引入另一个错误,请先在真机上尝试。
  • 我在 Win PC 上运行的 Ubuntu 18.04 VM 上。 init_geometry() 的版本不适合我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多