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日