QPushButton 的子类化 [英] Subclassing of QPushButton

查看:106
本文介绍了QPushButton 的子类化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在寻找一种继承 QPushButton 的方法,这样我就可以在构建新按钮时连接点击"信号,例如:

Btn = CustomButtonClass('Text', clicked='lambda: self.func(par)')

到目前为止 - 没有任何成功.

我想是将正确的参数传递给 CustomButtonClass 的 init(),但不知道是什么,为什么.

我有什么:

class CustomButtonClass(QtGui.QPushButton):def __init__(self, text, parent=None):super().__init__()

我也注意到:

Btn.clicked.connect(lambda: self.func(par))

也不起作用.

我是否必须覆盖 QPushButton 的 mouseReleaseEvent 或构建自定义信号才能完成我的任务?

解决方案

你不需要创建子类,因为 PyQt 和 PySide 都已经有这个功能(见 PyQt 文档中的使用关键字参数连接信号).

演示:

<预><代码>>>>从 PyQt4 导入 QtGui>>>app = QtGui.QApplication([])>>>btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))>>>btn.click()你好,世界!

如果你仍然需要子类化,那么你当然可以简单地做:

class CustomButtonClass(QtGui.QPushButton):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)

I've been looking for a way of subclassing QPushButton, so I can connect 'clicked' signal when constructing new button, like:

Btn = CustomButtonClass('Text', clicked='lambda: self.func(par)')

So far - without any success.

I guess the thing is to pass correct parameters to init() of CustomButtonClass, but have no idea what, and why.

What I've got:

class CustomButtonClass(QtGui.QPushButton):
    def __init__(self, text, parent=None):
        super().__init__()

I also noticed that:

Btn.clicked.connect(lambda: self.func(par))

Also doesn't work.

Do I have to override QPushButton's mouseReleaseEvent or construct custom signal to be able to complete my task?

解决方案

You don't need to create a sub-class, because both PyQt and PySide already have this feature (see Connecting Signals Using Keyword Arguments in the PyQt docs).

Demo:

>>> from PyQt4 import QtGui
>>> app = QtGui.QApplication([])
>>> btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))
>>> btn.click()
Hello World!

If you still need to subclass, then of course you can simply do:

class CustomButtonClass(QtGui.QPushButton):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

这篇关于QPushButton 的子类化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆