如何在PyQt5中添加n个具有功能的按钮



我试图在PyQt5中制作一个答案检查应用程序。我决定编码它,而不是在Qt设计器中设计,因为问题的数量可能会根据情况而变化。

我试着用for循环创建它。它看起来是这样的。在此处输入图像描述

如图所示,我需要选项A、B、C和D,其中有n个问题。但我添加了for循环,我无法检测按下了哪个按钮。

我使用的代码是这样的。

for i in range(1, 11):
self.label = QLabel(self)
self.label.setText(f'{i}.')
self.label.move(self.x, (self.y+2)*i-50)

self.buttonA = QPushButton(self)
self.buttonA.setText('A')
self.buttonA.move(self.x+100, self.y*i-50)

self.buttonB = QPushButton(self)
self.buttonB.setText('B')
self.buttonB.move(self.x+200, self.y*i-50)

self.buttonC = QPushButton(self)
self.buttonC.setText('C')
self.buttonC.move(self.x+300, self.y*i-50)

self.buttonD = QPushButton(self)
self.buttonD.setText('D')
self.buttonD.move(self.x+400, self.y*i-50)

self.buttonA.clicked.connect(self.highlite)

而self-highlite看起来是这样的。

def highlite(self):
self.buttonA.setStyleSheet('background-color : yellow;')

对于每个动作,基本上都需要保留问题编号。之后,您需要将所选按钮与问题编号存储在字典或数组中。

selected_answers = {} # dict to store results
def select_answer(button, question_number, answer):
global selected_answers
selected_answers[question_number] = answer
button.setStyleSheet('background-color : yellow;')
for i in range(1, 11):
label = QLabel(self)
label.setText(f'{i}.')
label.move(self.x, (self.y+2)*i-50)

buttonA = QPushButton(self)
buttonA.setText('A')
buttonA.move(self.x+100, self.y*i-50)       
buttonA.clicked.connect(lambda: select_answer(buttonA, i, 'A'))
# ... do the same for remaining options

最新更新