Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测窗口小部件窗口大小调整信号中的大小调整_Python_Pyqt_Pyqt5_Qwidget - Fatal编程技术网

Python 检测窗口小部件窗口大小调整信号中的大小调整

Python 检测窗口小部件窗口大小调整信号中的大小调整,python,pyqt,pyqt5,qwidget,Python,Pyqt,Pyqt5,Qwidget,我用Qt设计器创建了一个简单的UI,并将其转换为Python代码。我搜索了任何检测窗口大小变化的方法 这是生成的代码: from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def onResize(event): print(event) def setupUi(self, MainWindow): MainWindow.setObjectName("M

我用Qt设计器创建了一个简单的UI,并将其转换为Python代码。我搜索了任何检测窗口大小变化的方法

这是生成的代码:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def onResize(event):
        print(event)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowTitle("MainWindow")
        MainWindow.resize(200, 200)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)

        MainWindow.resized.connect(self.someFunction)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
我发现了一个类似的问题,建议重写QMainWindow的resizeEvent方法

但它们都不能解决我的问题。是否有任何调整大小的功能来检测窗口大小调整,如下所示:

MainWindow.resized.connect(self.someFunction)

默认情况下没有这样的信号,但是您可以创建
大小调整后的
信号,我们在
大小调整事件
函数中发出它

例如:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowTitle("MainWindow")
        MainWindow.resize(200, 200)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


class Window(QtWidgets.QMainWindow):
    resized = QtCore.pyqtSignal()
    def  __init__(self, parent=None):
        super(Window, self).__init__(parent=parent)
        ui = Ui_MainWindow()
        ui.setupUi(self)
        self.resized.connect(self.someFunction)

    def resizeEvent(self, event):
        self.resized.emit()
        return super(Window, self).resizeEvent(event)

    def someFunction(self):
        print("someFunction")


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

为什么
返回super(…)
resizeEvent
不会返回任何内容根据@user136036,每个函数都会返回一些内容,即使这些内容是“nothing”,例如,您可以使用
void foo(){return;}
或干脆
void foo(){}
,在不返回任何内容的方法中,return的使用与否是一种风格,是可选的。这种函数中没有return语句,称为void函数。Void函数是那些不返回任何内容的函数。”None'是Python中的一种特殊类型,在void函数结束后返回。所以从技术上讲,它总是返回
None
,但实际上,它什么也不返回。