鱼C论坛

 找回密码
 立即注册
查看: 412|回复: 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:

  1. import sys
  2. import zero_widgets_act


  3. from PyQt5 import QtCore,QtGui,QtWidgets
  4. from PIL import Image

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

  6. class ZeroWindowAct(QtWidgets.QMainWindow):
  7.     def __init__(self):
  8.         super(ZeroWindowAct, self).__init__()
  9.         self.setupWidget()

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


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

  15.     root=ZeroWindowAct()

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

  17.     root.show()
  18.     sys.exit(app.exec_())
复制代码



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

  1. import sys

  2. from PyQt5 import QtCore, QtGui, QtWidgets

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

  4. class Ui_Dialog(object):
  5.     def setupUi(self):

  6.         self.buttonUI()


  7.     def buttonUI(self):
  8.         self.test_button=QtWidgets.QPushButton(self)
  9.         self.test_button.setGeometry(QtCore.QRect(200,200,200,50))
  10.         self.test_button.setText('test')
复制代码



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

  1. import sys
  2. import zero_widgets
  3. import time

  4. from PyQt5 import QtCore,QtGui,QtWidgets
  5. from PIL import Image

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


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

  11.         self.setupUi()

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

  13.     def opn_btn_clicked(self):

  14.         print('yes')

复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://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)。

  1. import sys
  2. import zero_widgets_act

  3. from PyQt5 import QtCore, QtGui, QtWidgets
  4. from PIL import Image

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

  6. class ZeroWindowAct(QtWidgets.QMainWindow):
  7.     def __init__(self):
  8.         super(ZeroWindowAct, self).__init__()
  9.         self.setupWidget()

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

  15. if __name__ == '__main__':
  16.     app = QtWidgets.QApplication(sys.argv)
  17.     root = ZeroWindowAct()
  18.     root.show()
  19.     sys.exit(app.exec_())
复制代码


### 修改 `zero_widgets_act.py`

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

  1. import sys
  2. import zero_widgets
  3. import time

  4. from PyQt5 import QtCore, QtGui, QtWidgets
  5. from PIL import Image

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

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

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

  12.     def opn_btn_clicked(self):
  13.         print('yes')

  14. class Ui_Dialog(object):
  15.     def setupUi(self, Dialog):
  16.         Dialog.setObjectName("Dialog")
  17.         Dialog.resize(400, 300)
  18.         self.buttonUI(Dialog)

  19.     def buttonUI(self, Dialog):
  20.         self.test_button = QtWidgets.QPushButton(Dialog)
  21.         self.test_button.setGeometry(QtCore.QRect(200, 200, 200, 50))
  22.         self.test_button.setText('test')
复制代码


### 总结

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 14:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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