鱼C论坛

 找回密码
 立即注册
查看: 223|回复: 1

[pyqt5]如何在前后台分离,且两个不同的.py中,将QWidget绑定到QMainWindow上

[复制链接]
发表于 2024-7-14 17:28:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
其中负责QMainWindow模块的.py没有做前后台,为一个文件
负责QWidget模块的.py分离了前后台

然而从zero_wind_act.py启动后只显示空白的QMainWindow界面,并没有把QWidget成功绑定上去,并没有显示QWidget内容,求解。


负责QMainWindow模块的zero_wind_act.py:
import sys
import zero_widgets_act


from PyQt5 import QtCore,QtGui,QtWidgets
from PIL import Image

sys.path.append(r'G:\\pythoncodes\\qt5')

class ZeroWindowAct(QtWidgets.QMainWindow):
    def __init__(self):
        super(ZeroWindowAct, self).__init__()
        self.setupWidget()

    def setupWidget(self):
        self.resize(1080, 720)
        self.setWindowTitle('test0')       


if __name__=='__main__':
    app = QtWidgets.QApplication(sys.argv)

    root=ZeroWindowAct()

    zero_widgets_act.ZeroWidgetsAct(root)        #调用要绑定的QWidget模块

    root.show()
    sys.exit(app.exec_())


负责QWidget模块的zero_widgets.py(前台UI)界面:
import sys

from PyQt5 import QtCore, QtGui, QtWidgets

sys.path.append(r'G:\\pythoncodes\\qt5')

class Ui_Dialog(object):
    def setupUi(self):

        self.buttonUI()


    def buttonUI(self):
        self.test_button=QtWidgets.QPushButton(self)
        self.test_button.setGeometry(QtCore.QRect(200,200,200,50))
        self.test_button.setText('test')


负责QWidget模块的zero_widgets_act.py(后台)界面:
import sys
import zero_widgets
import time

from PyQt5 import QtCore,QtGui,QtWidgets
from PIL import Image

sys.path.append(r'G:\\pythoncodes\\qt5')


class ZeroWidgetsAct(zero_widgets.Ui_Dialog,QtWidgets.QWidget):
    def __init__(self,root):
        super(zero_widgets.Ui_Dialog, self).__init__()
        self.root=root

        self.setupUi()

        self.test_button.clicked.connect(self.opn_btn_clicked)

    def opn_btn_clicked(self):

        print('yes')

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-14 17:29:57 | 显示全部楼层
你的问题是如何在前后台分离的两个不同的 `.py` 文件中,将 `QWidget` 绑定到 `QMainWindow` 上,但启动后只显示空白的 `QMainWindow` 界面,没有显示 `QWidget` 的内容。我们来一步步排查并解决这个问题。

### 原因分析

1. `zero_widgets_act.ZeroWidgetsAct(root)` 只是创建了一个 `ZeroWidgetsAct` 的实例,但没有将这个实例添加到 `ZeroWindowAct` 中。
2. `setupUi` 方法中,`buttonUI` 方法需要将按钮添加到合适的父容器中。

### 解决方案

我们需要确保 `ZeroWidgetsAct` 的实例被正确地嵌入到 `QMainWindow` 中。修改 `zero_wind_act.py` 和 `zero_widgets_act.py` 文件。

### 修改 `zero_wind_act.py`

在 `zero_wind_act.py` 中,我们需要将 `ZeroWidgetsAct` 实例添加为 `ZeroWindowAct` 的中央窗口小部件(central widget)。
import sys
import zero_widgets_act

from PyQt5 import QtCore, QtGui, QtWidgets
from PIL import Image

sys.path.append(r'G:\\pythoncodes\\qt5')

class ZeroWindowAct(QtWidgets.QMainWindow):
    def __init__(self):
        super(ZeroWindowAct, self).__init__()
        self.setupWidget()

    def setupWidget(self):
        self.resize(1080, 720)
        self.setWindowTitle('test0')
        self.widget = zero_widgets_act.ZeroWidgetsAct(self)
        self.setCentralWidget(self.widget)  # 设置中央窗口小部件

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    root = ZeroWindowAct()
    root.show()
    sys.exit(app.exec_())

### 修改 `zero_widgets_act.py`

确保 `ZeroWidgetsAct` 的实例是一个独立的 `QWidget` 并且其子控件(按钮等)被正确初始化。
import sys
import zero_widgets
import time

from PyQt5 import QtCore, QtGui, QtWidgets
from PIL import Image

sys.path.append(r'G:\\pythoncodes\\qt5')

class ZeroWidgetsAct(zero_widgets.Ui_Dialog, QtWidgets.QWidget):
    def __init__(self, root=None):
        super(ZeroWidgetsAct, self).__init__(root)  # 注意这里传递 root
        self.setupUi(self)  # 传递 self 以便设置 UI

        self.test_button.clicked.connect(self.opn_btn_clicked)

    def opn_btn_clicked(self):
        print('yes')

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.buttonUI(Dialog)

    def buttonUI(self, Dialog):
        self.test_button = QtWidgets.QPushButton(Dialog)
        self.test_button.setGeometry(QtCore.QRect(200, 200, 200, 50))
        self.test_button.setText('test')

### 总结

- 在 `zero_wind_act.py` 中,将 `ZeroWidgetsAct` 实例设置为 `QMainWindow` 的中央小部件。
- 确保在 `zero_widgets_act.py` 中,`ZeroWidgetsAct` 的 UI 元素被正确初始化,并且其父容器被正确传递。

按照上述修改后,启动 `zero_wind_act.py` 应该能看到带有按钮的 `QMainWindow` 界面。如果还有其他问题,欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表