大家好,这里是代码
from PyQt5 import QtCore, QtGui, QtWidgets
import openpyxl
from random import randint
from PyQt5.QtWidgets import QMessageBox
import os
question_list = []
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1223, 578)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.QuestionField = QtWidgets.QTextBrowser(self.centralwidget)
self.QuestionField.setObjectName("QuestionField")
self.verticalLayout.addWidget(self.QuestionField)
self.EntryField = QtWidgets.QPlainTextEdit(self.centralwidget)
self.EntryField.setObjectName("EntryField")
self.verticalLayout.addWidget(self.EntryField)
self.ButtonNext = QtWidgets.QPushButton(self.centralwidget)
self.ButtonNext.setObjectName("ButtonNext")
self.verticalLayout.addWidget(self.ButtonNext)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.start_quiz()
def clicked_next(self):
self.ButtonNext.clicked.connect(self.get_next_question)
def get_next_question(self):
self.clicked_next()
wb_obj = openpyxl.load_workbook("questions.xlsx")
if len(question_list) < 3:
wb_sheet = wb_obj['Block_1']
elif len(question_list) == 3:
wb_sheet = wb_obj['Block_2']
elif len(question_list) == 4:
wb_sheet = wb_obj['Block_3']
else:
sys.exit(app.exec_())
rows = wb_sheet.max_row
nums_wb = randint(2, rows)
question = wb_sheet[f'A{nums_wb}'].value
print(question)
print(len(question_list))
self.QuestionField.setText(question)
question_list.append(question)
def start_quiz(self):
greetings = QMessageBox()
btn_begin = QtWidgets.QPushButton()
greetings.setWindowTitle('Приветствие')
greetings.setText(
f'Приветствую тебя {os.getlogin()}. Предлогаю в начале рабочего дня пройти тебе тест на знание наших цен и предложений')
greetings.setIcon(QMessageBox.Information)
greetings.exec_()
self.get_next_question()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Опросник"))
self.ButtonNext.setText(_translate("MainWindow", "Далее"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
当您单击按钮时далее
,出于某种原因它дважды
会给出一个值,而不是一次。
意思是一开始播放来自该函数的欢迎消息start_quiz
,然后轮询函数开始get_next_question
,在用户输入他的答案并单击按钮后,clicked_next
应该再次调用该函数get_next_question
等等,直到列表长度更大比4
。
但是当我点击按钮时далее
,更改问题的功能立即开始给出2
值。
我不知道去哪里看
您没有提供可重现的示例。没有questions.xlsx文件,就无法测试您的应用程序。
给你的一些建议:
永远不要更改 Qt Designer 生成的代码。
创建另一个继承自相应小部件的类,并使用生成的类来填充它。
字符串
self.ButtonNext.clicked.connect(self.get_next_question)
在错误的位置作为字符串self.wb_obj = openpyxl.load_workbook("questions.xlsx")
最后,关于您的代码的一些虚拟想法,请参见下面的验证。