haiyingbs 发表于 2022-9-19 20:41:57

pyqt5 , 方法中创建控件并显示,没有反应

本帖最后由 haiyingbs 于 2022-9-21 14:01 编辑

我有二个文件,一个是view.py 一个是controller.py文件
我在view.py,定义了“getnew”方法:生成新按钮控件事件。
我在controller.py,添加了一个点击按钮事件,来调用“getnew”这个方法。


但结果是,事件都触发了,就是没有显示有舞台上。有高手知道是什么原因吗?

还有就是我购买了鱼币,怎么悬赏啊?


代码如下:

#############################################
view.py:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget, QMainWindow, QPushButton, QVBoxLayout


class View(QMainWindow):

    def __init__(self):
      super(View, self).__init__()
      self.setUI()

    def setUI(self):
      self.widgetWin = QWidget()

      self.btn = QPushButton(self.widgetWin)
      self.btn.setText('我是旧按钮')
      self.layout = QVBoxLayout(self.widgetWin)
      self.layout.addWidget(self.btn)

      self.setCentralWidget(self.widgetWin)

    def getnew(self, str):
      """添加新按钮方法"""
      print('调用了getnew')
      self.btn1 = QtWidgets.QPushButton(str)
      self.btn1.setText('我是新按钮')

#############################################
controller.py
import view

class Controller:

    def __init__(self):
      # 加载ui界面类,用于设置ui
      self.view = view.View()

      self.view.btn.clicked.connect(lambda: self.onBtnMainClicked())
      # 如果调用生成新按钮方法,放在init里就会生效
      # self.view.getnew(self.view.widgetWin)
      self.view.show()

    def onBtnMainClicked(self):
      # 使用model带的函数处理数据
      print('调用了onBtnMainClicked')
      # 调用创建新按钮方法没有返应
      self.view.getnew(self.view.widgetWin)

#######################################
main.py

from PyQt5 import QtWidgets
import sys
import controller

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    ctr = controller.Controller()

    app.exec_()

haiyingbs 发表于 2022-9-20 14:48:57

请问一下是什么原因

haiyingbs 发表于 2022-9-20 20:40:17

是需要那个函数吗?

haiyingbs 发表于 2022-9-20 20:52:21

不好意思入口文件忘放去了 main.py

hrpzcf 发表于 2022-9-21 10:12:07

本帖最后由 hrpzcf 于 2022-9-21 10:15 编辑

getnew里你只创建了self.btn1,并没有把放到界面上,怎么会有反应呢

view.py
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget, QMainWindow, QPushButton, QVBoxLayout


class View(QMainWindow):
    def __init__(self):
      super(View, self).__init__()
      self.setUI()

    def setUI(self):
      self.widgetWin = QWidget()

      self.btn = QPushButton(self.widgetWin)
      self.btn.setText("我是旧按钮")
      self.layout1 = QVBoxLayout(self.widgetWin)
      self.layout1.addWidget(self.btn)

      self.setCentralWidget(self.widgetWin)

    def getnew(self, str):
      """添加新按钮方法"""
      print("调用了getnew")
      self.btn1 = QtWidgets.QPushButton(str)
      self.btn1.setText("我是新按钮")
      self.layout1.addWidget(self.btn1)

haiyingbs 发表于 2022-9-21 13:58:54

本帖最后由 haiyingbs 于 2022-9-21 14:00 编辑

hrpzcf 发表于 2022-9-21 10:12
getnew里你只创建了self.btn1,并没有把放到界面上,怎么会有反应呢

view.py

self.btn1 = QtWidgets.QPushButton(str) 我这句就是靠传QWidget控件来显示的。
其实 str=self.widgetWin = QWidget()这个。不过问题找到了,靠传参事件来,放在舞台上,状态是hide,必须要show一下。
还是要谢谢你。
页: [1]
查看完整版本: pyqt5 , 方法中创建控件并显示,没有反应