问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用pyqt4写GUI小程序时一个clicked信号调用三次槽函数

发布网友 发布时间:2022-05-07 15:18

我来回答

3个回答

热心网友 时间:2022-04-18 07:08

有时我们展示了一个列表, 并想提供查看某项列表的详细内容, 我们会在列表项的末端加一个查看按钮, 这时我们如何在按按钮的时候得知这是那一项呢? 这时就需要带参数的信号, 信号是可以带参数的, 参数会在信号发送时携带, 并传递给接收此信号的槽

from PyQt4 import QtGui, QtCore

class MyButton(QtGui.QPushButton):
myclicked = QtCore.pyqtSignal(int)

def __init__(self, _id, *args, **kwargs):
QtGui.QPushButton.__init__(self, *args, **kwargs)

self._id = _id

self.connect(self, QtCore.SIGNAL("clicked()"), self.emitMyclicked)

def emitMyclicked(self):
self.myclicked.emit(self._id)

app = QtGui.QApplication([])

w = QtGui.QWidget()
w.resize(100, 100)

def showMsg(_id):
QtGui.QMessageBox.information(w, u"信息", u"查看 %d" % _id)

btn = MyButton(1, u"查看1", w)
w.connect(btn, QtCore.SIGNAL("myclicked(int)"), showMsg)

btn2 = MyButton(2, u"查看2", w)
btn2.move(0, 30)
w.connect(btn2, QtCore.SIGNAL("myclicked(int)"), showMsg)

w.show()
app.exec_()
上面例子可以看出, QObject.emit 发送带参数的信号时要携带参数. 当然上面例子也可以用下面方式来写

from PyQt4 import QtGui, QtCore

class MyButton(QtGui.QPushButton):
def __init__(self, _id, *args, **kwargs):
self._id = _id
QtGui.QPushButton.__init__(self, *args, **kwargs)

self.connect(self, QtCore.SIGNAL("clicked()"), self.emitClicked)

def emitClicked(self):
self.emit(QtCore.SIGNAL("myclicked(int)"), self._id)

app = QtGui.QApplication([])

w = QtGui.QWidget()
w.resize(100, 100)

def showMsg(_id):
QtGui.QMessageBox.information(w, u"信息", u"查看 %d" % _id)

btn = MyButton(1, u"查看1", w)
w.connect(btn, QtCore.SIGNAL("myclicked(int)"), showMsg)

btn2 = MyButton(2, u"查看2", w)
btn2.move(0, 30)
w.connect(btn2, QtCore.SIGNAL("myclicked(int)"), showMsg)
w.show()

app.exec_()追问我的问题主要是发出一时clicked,但是槽函数响应了三次,我原来按钮是通过pyqt designer来生成的,后来改成直接通过代码来写就没有问题,不知道为什么

热心网友 时间:2022-04-18 08:26

jingfang1998 回答的比较接近,下面我说一下最简单的方法:
就是槽函数不要用 on_按钮名_clicked 这种写法,就OK了,因为那样写会让按钮与设计器默认事件挂钩,所以会重复执行

热心网友 时间:2022-04-18 10:01

我也遇到了同样的问题, 不过在一番尝试和学习后终于知道怎么解决了

参考 (2)PyQt4读取文件,但是对话框打开两次

方法一 :

首先, 你要是在自定义的函数上面加个装饰器@pyqtSignature(''), 然后执行, 会发现执行2次(少了一次)

其次, 你的platWeight_ui.Ui_Form父类应该是从Qt Designer生成的脚本(.py文件)里面import进来的吧, 去那个脚本里面, 把自定义的槽函数 (如果是默认生成的, 不需要改写的, 不要注掉)连接的 QtCore.QObject.connect(self.xxx, ......) 这句注掉, 不让他执行.

你展示出的代码的这个部分也注掉,不让其执行

self.setupUi(self)

# self.connect(self.modifyButton,SIGNAL("clicked()"),self.on_modifyButton_clicked)

# self.connect(self.concelButton,SIGNAL("clicked()"),self.on_concelButton_clicked)

# self.connect(self.saveButton,SIGNAL("clicked()"),self.on_saveButton_clicked)

最后, 你再试试, 应该就是执行一次了. 缺点是在pyUIC后, 如果自定义的地方多, 需要注释的地方太多了, 而且每次刷新后都要重新注掉

后来我发现了

方法二:

在Qt Designer生成的ui文件pyUIC后的脚本(.py文件)中, 把下面这句注掉就可以了, 这种改法最简单, 连装饰器都不用加了, 但是你那个connect貌似应该要注掉

# QtCore.QMetaObject.connectSlotsByName(MainWindow)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...下图方式对折一分为二裁开成为A2纸(如图(2) 明信片怎么样固定 为什么我的高考录取通知书还没有到? 梦见我孙女光秃秃的躺在路上的预兆 师兄请按剧本来分集剧情介绍(第1-40全集)大结局,几点更新,在哪个台播出... 发挥什么优势 三合一烤肠机接煤气罐接口可以换方向吗 关于福睿斯4年,3万公里保养问题请教? 福睿斯水箱加水在哪里 福睿斯水箱加水在哪里加 CSGO武器箱怎么获得 CSGO武器箱钥匙在哪买便宜 如何在Windows下Eclipse+PyDev配置Python+PyQt4开发环境 今天研究了一下pyqt4,好像是可以直接在图形界面那里编,不一定要自己写... 救助:PyQt4 中怎么设置窗口关联 pyqt中建立的主窗口如何直接最大化显示 什么书中毛病最多?打数字、脑筋急转弯 如何用pyqt4写一个最简单的界面 什么书中毛病最多?(脑筋急转弯) 什么书中毛病最多。这是一个脑筋急转弯哦。 脑筋急转弯:书中毛病最多的书是什么书? 脑筋急转弯:什么书中毛病最多? 什么书毛病最多?? 什么比赛越往后退越赢??(脑筋急转弯) 脑筋急转弯 你能做,我能做,大家都做;一个人能做,两个人不能一起做。这是做什么? 脑筋急转弯一颗把你放进生命里的心 脑筋急转弯四侧,2,世界上什么国家没有一个人?3,什么书中毛病最多?4,小白加小白等于什么? 脑筋急转弯:什么书中毛病最多 什么书中毛病最多?<脑筋急转弯> 什么书中毛病最多(脑筋急转弯)? 什么书中毛病最多? 脑筋急转弯:猜一猜什么书里毛病最多?(四选一:鸟书/医书/古书/天书) 脑筋急转弯:什么书里毛病最多 PyQt4 dialog窗口最大化之后 里面的控件按比例增大 pyqt4 文本框怎么实现信号 pyqt4如何实现两个按钮间消息传递 浮夸可怜的个性签名,要很夸张很可怜,谢谢各大网友*合作!!! 咸阳事业单位招聘2022 2015年咸阳事业单位考试公告在哪看? 咸阳事业单位什么时候发公告 准备用稻米、糙米、黑米、薏米混合做杂米饭,各类米的比例是多少?煮之前需要浸泡多久? 2013年陕西咸阳市市直事业单位考试网 用黑米,绿豆,糙米怎么煮粥 为什么我的用qq登录不了了,一直显示帐号或密码错误? 2013年陕西咸阳市市直事业单位考试笔试时间是什么时候? 2013年陕西咸阳市市直事业单位考试报名时间 2013年陕西咸阳市市直事业单位考试公告 报名地址 职位表下载? 2015年咸阳事业单位考试笔试在什么时候? 2015年咸阳事业单位考试怎么报名? 2011咸阳事业单位招聘人数? 跑步完后能不能坐下 CSGO 爬楼梯我看别人可以爬的很快 怎么弄的 跑步后为什么不能立刻坐下?