【发布时间】:2015-03-13 04:56:06
【问题描述】:
为程序制作 PushButton 小部件。目的是创建每个 PushButton,将其连接到比较两个字符串值的函数 ap.parse_answer(),然后将 PushButton 添加到 QGridLayout 的适当单元格:
answers = ["this", "that", "the other", "one more"]
correct_answer = "this"
for grid_pos in [(i,j) for i in range(0,2) for j in range(0,2)]:
answer_disp = AnswerDisplay()
current_answer = answers.pop()
answer_disp.setText(current_answer)
answer_disp.clicked.connect(
lambda: self.ap.parse_answer(current_answer, answer))
answer_grid.addWidget(answer_disp, *grid_pos)
这是 AnswerDisplay 类:
class AnswerDisplay(QtGui.QPushButton):
def __init__(self):
super(AnswerDisplay, self).__init__()
answer_font = QtGui.QFont()
answer_font.setWeight(24)
answer_font.setPixelSize(20)
self.setFont(answer_font)
不幸的是,每个按钮都连接了相同的功能。生成的最后一个函数最终出现在所有按钮上,因此似乎连接正在重新应用于先前创建的按钮。但是我该如何解决这个问题?我的方法不可能完全无效,因为 setText() 函数正确地为每个按钮设置了文本,而不会覆盖之前的分配。
我试图解决制作单个 AnswerDisplay 然后使用 deepcopy() 复制它的问题:
for grid_pos in [(i,j) for i in range(0,2) for j in range(0,2)]:
disp = AnswerDisplay()
answer_disp = deepcopy(disp)
super(AnswerDisplay, answer_disp).__init__()
...
但它产生了同样不受欢迎的结果。
我进行了一些搜索,但我发现的只是人们试图获得我尝试不获得的结果的问题。任何帮助将不胜感激。
【问题讨论】:
标签: python python-3.x pyqt