在从列表创建小部件的 for 循环中使用时 PyQt 连接方法错误
我有一个 GUI 程序,
它会从名称列表中自动创建按钮, 并连接到一个函数并打印其名称。
但是当我运行这个程序时,我按下所有按钮,
它们都会返回最后一个按钮的名称。
我想知道为什么会发生这种事。 有人可以帮忙吗?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import logging
logging.basicConfig(level=logging.DEBUG,)
class MainWindow(QWidget):
def init(self):
names = ('a','b','c')
lo = QHBoxLayout(self)
for name in names:
button = QPushButton(name,self)
lo.addWidget(button)
self.connect(button,SIGNAL("clicked()"),
lambda :logging.debug(name))
if __name__=="__main__":
app = QApplication(sys.argv)
m = MainWindow();m.init();m.show()
app.exec_()
结果如:
python t.py
DEBUG:root:c
DEBUG:root:c
DEBUG:root:c
I have a GUI program,
It auto create buttons from a name list,
and connect to a function prints its name.
but when I run this program, I press all the buttons,
they all return the last button's name.
I wonder why this thing happens. can any one help?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import logging
logging.basicConfig(level=logging.DEBUG,)
class MainWindow(QWidget):
def init(self):
names = ('a','b','c')
lo = QHBoxLayout(self)
for name in names:
button = QPushButton(name,self)
lo.addWidget(button)
self.connect(button,SIGNAL("clicked()"),
lambda :logging.debug(name))
if __name__=="__main__":
app = QApplication(sys.argv)
m = MainWindow();m.init();m.show()
app.exec_()
result like:
python t.py
DEBUG:root:c
DEBUG:root:c
DEBUG:root:c
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我在您的代码中至少看到一个错误。
替换:
通过:
请参阅 为什么 map() 和列表理解的结果有何不同?了解详情。
I see at least one bug in your code.
Replace:
By:
See Why results of map() and list comprehension are different? for details.