RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1474914
Accepted
Ruin
Ruin
Asked:2022-12-07 17:57:34 +0000 UTC2022-12-07 17:57:34 +0000 UTC 2022-12-07 17:57:34 +0000 UTC

文件输入错误

  • 772

告诉我如何用这段代码正确写入数据

import csv
import datetime
import os
from random import randint

import openpyxl
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMessageBox


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)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Опросник"))
        self.ButtonNext.setText(_translate("MainWindow", "Далее"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.question_list = []  # +++
        self.wb_obj = openpyxl.load_workbook("questions.xlsx")  # +++

        self.ButtonNext.clicked.connect(self.get_next_question)  # !!! +++

        self.start_quiz()
        self.get_next_question()

    def get_next_question(self):
        if len(self.question_list) < 3:
            wb_sheet = self.wb_obj['Block_1']
        elif len(self.question_list) == 3:
            wb_sheet = self.wb_obj['Block_2']
        elif len(self.question_list) == 4:
            wb_sheet = self.wb_obj['Block_3']
        else:
            #            sys.exit(app.exec_())
            self.close()
        answer = self.EntryField.toPlainText()
        rows = wb_sheet.max_row
        nums_wb = randint(2, rows)
        question = wb_sheet[f'A{nums_wb}'].value
        self.question_list.append(question)
        self.QuestionField.setText(question)
        self.write_to_file(question, answer)
        print(question, '--', answer, '--', len(self.question_list))
        self.EntryField.clear()

    def write_to_file(self, question, answer):
        with open(f"{os.getlogin()}_{datetime.date.today()}.csv", 'a',
                  encoding='cp1251', errors='replace', newline='') as file:
            writer = csv.writer(file, delimiter=';')
            writer.writerow([question, answer])

    def start_quiz(self):
        greetings = QMessageBox()
        greetings.setWindowTitle('Приветствие')
        greetings.setText(
            f'Приветствую тебя {os.getlogin()}. Предлогаю в начале рабочего дня пройти тебе тест на знание наших цен и предложений')
        greetings.setIcon(QMessageBox.Information)
        greetings.exec_()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

这是文件的链接,以便您可以检查它。在回答问题时,文件目前以 https://docs.google.com/spreadsheets/d/1WKymcPzKrgxBLLMYD5s5TTW9S3t5Drfn/edit?usp=share_link&ouid=109137112156684725929&rtpof=true&sd=true 问答的形式保存信息是必要的, 当你回答时,保存的结果尽可能奇怪第一个问题,答案转到刚刚创建的第二个问题,第一个仍然是空的在此处输入图像描述

python
  • 1 1 个回答
  • 32 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-12-08T04:03:52Z2022-12-08T04:03:52Z

    试试这样:

    import csv
    import datetime
    import os
    from random import randint
    import openpyxl
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtWidgets import QMessageBox
    
    
    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)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "Опросник"))
            self.ButtonNext.setText(_translate("MainWindow", "Далее"))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self):
            super().__init__()
            self.setupUi(self)
    
            self.question_list = [] 
            
            self.question = ''                                             # +++ 
            self.ammount_of_questions = 4                                  # +++  
            
            self.wb_obj = openpyxl.load_workbook("questions.xlsx")  
            self.ButtonNext.clicked.connect(self.get_next_question)  
    
            self.start_quiz()
            self.get_next_question()
    
        def get_next_question(self):
    # +++
            num_question = len(self.question_list)                         # +++ 
            print(f'num_question ==={num_question}===')                    # 
            
            if num_question < 3:
                wb_sheet = self.wb_obj['Block_1']
            elif num_question == 3:
                wb_sheet = self.wb_obj['Block_2']
            elif num_question == 4:
                wb_sheet = self.wb_obj['Block_3']
            else:
                # self.close()
                self.end_test()
                return
                
            answer = self.EntryField.toPlainText()
            rows = wb_sheet.max_row
            nums_wb = randint(2, rows)
            question = wb_sheet[f'A{nums_wb}'].value
            self.question_list.append(question)
            self.QuestionField.setText(question)
            
    # +++
            if num_question:                                               # +++
    #            self.write_to_file(question, answer)
    # ---------------------------> vvvvvvvvvvvvv <------------------------------
                self.write_to_file(self.question, answer)                  # +++
                print(num_question, '--', self.question, '--', answer)
                self.EntryField.clear()
    # +++            
            self.question = question                                       # +++
            
            if num_question == self.ammount_of_questions:                  # +++
                self.end_test()                                            # +++
                return                                                     # +++
    
    # +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        def end_test(self):
            self.QuestionField.clear()
            self.ButtonNext.setEnabled(False)
            self.EntryField.setEnabled(False)
            msg = QtWidgets.QMessageBox.information(
                self, 
                'Тест закончен', 
                'Cпасибо за участие, хорошего вам дня.'
            )
                
            self.QuestionField.setText('''
            Тест закончен, спасибо за участие.
            Ваши результаты:
            тут можно что-то написать о результатах тестирования.
            ''')
    # +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        
    
        def write_to_file(self, question, answer):
            with open(f"{os.getlogin()}_{datetime.date.today()}.csv", 'a',
                      encoding='cp1251', errors='replace', newline='') as file:
                writer = csv.writer(file, delimiter=';')
                writer.writerow([question, answer])
    
        def start_quiz(self):
            greetings = QMessageBox()
            greetings.setWindowTitle('Приветствие')
            greetings.setText(
                f'Приветствую Вас {os.getlogin()}. Предлогаю в начале рабочего дня пройти тебе тест на знание наших цен и предложений')
            greetings.setIcon(QMessageBox.Information)
            greetings.exec_()
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.resize(300, 400)
        w.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    在此处输入图像描述

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5