XD-?_heartbeat 2021-12-05 15:19 采纳率: 0%
浏览 20
已结题

Qt for python,按照命名范式来命名槽函数,没有实现自动关联,如何解决?

在跟着《Python Qt GUI 与可视化编程》这本书学习时,学到这一小节:为组件的内建信号编写槽函数。

目标是点击窗体上的按钮,清除文本框的内容。

一些代码:
import sys
from ui_Dialog import Ui_Dialog
from PySide6.QtWidgets import *

# ui_Dialog是.ui文件转换出来的.py文件,Ui_Dialog是里面的一个类
class QmyDialog(QDialog):
    def __init__(self, parent=None):
        super(QmyDialog, self).__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

    def on_btnClear_clicked(self):
        self.ui.textEdit.clear()

窗体上按钮的Objectname是btnClear,我在Qt Creater界面确认了,也在ui文件转换出来的py文件里确认过了。

我反复确认了没有漏掉书上的任何一步。但是不知道为什么没能实现槽函数与信号的自动连接。
尝试在__init__底下添加
self.ui.btnClear.clicked.connect(self.on_btnClear_clicked)

结果居然可以了!但是书上没有我刚添加的代码,而且加了这句代码就不是自动连接了吧。有人知道为什么吗?

class QmyDialog(QDialog):
    def __init__(self, parent=None):
        super(QmyDialog, self).__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.btnClear.clicked.connect(self.on_btnClear_clicked)
    def on_btnClear_clicked(self):
        self.ui.textEdit.clear()

可以运行的代码如上,但这种写法应该是自定义槽函数的写法才对啊

  • 写回答

2条回答 默认 最新

  • XD-?_heartbeat 2021-12-07 08:56
    关注

    用装饰器增强槽函数!!!
    在类底下的函数定义前面,加@Slot (pyside6写法)
    如果这个函数需要参数的话,比如需要str类型的参数,就在前面加@Slot(str)

    评论

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 创建了问题 12月5日

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊