You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5单选按钮选中值无法更新问题修复求助

问题修复:PyQt5单选按钮对应的变量值无法更新

核心问题分析

你的代码存在几个关键错误导致变量无法更新:

  • Add和rbtn方法未缩进,不属于SheetsForm类,无法正确访问类实例的成员变量
  • 判断单选按钮ID时,self.group.checkedId == 2少了括号,应调用方法self.group.checkedId()
  • 文件关闭语句file.close未加括号,导致文件未正确关闭
  • 计算时间差的内部函数td中,字符串分割写法错误,应使用str_ts.split()而非str.split(str_ts)

修复后的完整代码

import datetime
from datetime import *
import sys
from PyQt5.QtCore import QDate
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QButtonGroup

from TimeTable import Ui_MainWindow

class SheetsForm(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.EvereDate1.hide()
        self.EveryDate2.hide()
        self.WaWdate1.hide()
        self.WaWdate2.hide()
        self.OnceDate.hide()
        self.AddBottom.clicked.connect(self.Add)
        self.EvereDate1.setMinimumDate(QDate(2022, 9, 1))
        self.EveryDate2.setMinimumDate(QDate(2022, 9, 1))
        self.WaWdate1.setMinimumDate(QDate(2022, 9, 1))
        self.WaWdate2.setMinimumDate(QDate(2022, 9, 1))
        self.OnceDate.setMinimumDate(QDate(2022, 9, 1))
        self.group = QButtonGroup()
        self.group.addButton(self.EveryWeeks,1)
        self.group.addButton(self.WeekAfterWeek, 2)
        self.group.addButton(self.OnceTime, 3)
        self.group.buttonClicked.connect(self.rbtn)
        self.date1 = ""
        self.date2 = ""
        self.date = ""
        file = open("test1.txt", "+w")
        file.write("Дата начала     Дата конца      Время начала        Время конца     Продолжительность       Имя преподавателя       Назаваание предмета\n")
        file.close()

    def Add(self):
        paramTecher = self.TeachText.toPlainText()
        paramSubj = self.SubjText.toPlainText()
        self.timeStart = self.timeF.time().toPyTime()
        self.timeEnd = self.timeL.time().toPyTime()
        
        def td():
            str_ts = self.timeStart.strftime("%H %M")
            str_te = self.timeEnd.strftime("%H %M")
            s = [int(s) for s in str_ts.split() if s.isdigit()]
            e = [int(e) for e in str_te.split() if e.isdigit()]

            s_sec = s[0]*3600 + s[1]*60
            e_sec = e[0]*3600 + e[1]*60

            return (e_sec - s_sec)

        delta = round(td()/3600,1)

        if self.group.checkedId() == 1:
            self.date1 = self.EvereDate1.date().toPyDate()
            self.date2 = self.EveryDate2.date().toPyDate()
        elif self.group.checkedId() == 2:
            self.date1 = self.WaWdate1.date().toPyDate()
            self.date2 = self.WaWdate2.date().toPyDate()
        else:
            self.date1 = self.OnceDate.date().toPyDate()
            self.date2 = "              "
        
        str_val = (f"{self.date1}        {self.date2}     {self.timeStart.strftime('%H:%M')}                {self.timeEnd.strftime('%H:%M')}          {delta}                      {paramTecher}             {paramSubj}\n")
        file = open("test1.txt", "+a")
        file.write(str_val)
        file.close()
        print(self.date1, self.date2, self.timeStart, self.timeEnd, delta, paramTecher, paramSubj)

    def rbtn(self):
        if self.group.checkedId() == 1:
            self.EvereDate1.show()
            self.EveryDate2.show()
            self.WaWdate1.hide()
            self.WaWdate2.hide()
            self.OnceDate.hide()
        elif self.group.checkedId() == 2:
            self.EveryDate2.hide()
            self.EvereDate1.hide()
            self.WaWdate1.show()
            self.WaWdate2.show()
            self.OnceDate.hide()            
        elif self.group.checkedId() == 3:
            self.EveryDate2.hide()
            self.EvereDate1.hide()
            self.WaWdate1.hide()
            self.WaWdate2.hide()
            self.OnceDate.show()

关键修复点说明

  1. 将Add和rbtn方法缩进至SheetsForm类内部,确保方法能访问类实例的成员变量
  2. 修正self.group.checkedId == 2为self.group.checkedId(),正确调用获取选中按钮ID的方法
  3. 将file.close改为file.close(),确保文件流正确关闭
  4. 优化时间差计算函数td,去掉不必要的self参数,修正字符串分割的写法
  5. 使用f-string格式化输出字符串,提升代码可读性

内容的提问来源于stack exchange,提问作者Hbethann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:30:48