python - QPushButton 添加到布局时不起作用

标签 python python-3.x pyqt pyqt5 qt-designer

我有一个 QWidget(它被设置为一个名为 Ui_Form 的 UI),我希望它成为 QFrame 的一部分,而 QFrame 已经是我的 QMainWindow 的一部分;这个 QWidget 是一个带有按钮和其他对象的 UI 表单。我尝试将其添加为框架布局的一部分,但问题是当我将 QWidget 添加到布局中时,Ui_Form 中的 QPushButton 停止工作,我的代码如下。

## My QMainWindow
from PyQt5 import QtCore, QtGui, QtWidgets

class MainWindow(object):
    def setupUi(self, mainWindow):
        # pyuic5 code here ...
        self.MyFrame = QtWidgets.QFrame(self.centralwidget)
        self.MyFrame.setGeometry(QtCore.QRect(0, 560, 1201, 201))
        self.MyFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.MyFrame.setFrameShadow(QtWidgets.QFrame.Raised)
        #  more pyuic5 code here ...

        my_form = QtWidgets.QWidget()
        my_form_ui = Ui_Form()
        my_form_ui.setupUi(my_form)
        frame_layout = QtWidgets.QVBoxLayout()
        frame_layout.addWidget(my_form)
        self.MyFrame.setLayout(frame_layout)

我的 Ui_Form 类,在将其添加到布局之前曾经起作用

## My Ui_Form class
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, form):
        # some pyuic5 code here ...
        self.myPushButton = QtWidgets.QPushButton(form)
        self.myPushButton.setGeometry(QtCore.QRect(415, 200, 101, 40))
        self.myPushButton.setObjectName("myPushButton")
        self.myPushButton.clicked.connect(self.printHello) 

    def printHello(self):
        print("Hello World!")

MainWindow 将很好地显示 Ui_Form 中的所有元素,但按钮不能工作,尽管我调用 setupUi 方法将按钮连接到 printHello 方法。有任何想法吗?

最佳答案

说明:

问题是 my_form_ui 是一个局部变量,当您完成执行 setupUi() 方法时,该变量将被消除,因此 printHello()方法将不再存在。使用QPushButton就不会产生这个问题,因为所有权是GUI。

解决方案:

my_form_ui 设置为该类的属性:

# ...
my_form = QtWidgets.QWidget()
<b>self.my_form_ui = Ui_Form()
self.my_form_ui.setupUi(my_form)</b>
frame_layout = QtWidgets.QVBoxLayout()
# ...

关于python - QPushButton 添加到布局时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58298525/

相关文章:

python - 你能在 Python 列表理解中嵌入一个 try 吗?

python - 为 pipenv 项目中的 python 文件创建命令行别名

python - 如何为 Firefox 设置 Selenium Python 环境

python - 模拟AWS服务进行测试

python - 如何找到用户输入的数字之间的数字?

python - 根据两个元素对元组列表进行排序

python - QLineEdit 只接受 PyQt4 中的字符

python - PyQT4 signal.connect 是否使对象保持事件状态?

python - PyQt:lineEdit 上的 ReturnPressed 方法连接到错误的按钮

python - 如何根据另一个模型的 "x"字段设置 "y"字段的值? Odoo-10