鱼C论坛

 找回密码
 立即注册
查看: 2401|回复: 5

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

[复制链接]
发表于 2022-9-19 20:41:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 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_()

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

使用道具 举报

 楼主| 发表于 2022-9-20 14:48:57 | 显示全部楼层
请问一下是什么原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-20 20:40:17 | 显示全部楼层
是需要那个函数吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-20 20:52:21 | 显示全部楼层
不好意思入口文件忘放去了 main.py
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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一下。
还是要谢谢你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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