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()
关键修复点说明
- 将
Add和rbtn方法缩进至SheetsForm类内部,确保方法能访问类实例的成员变量 - 修正
self.group.checkedId == 2为self.group.checkedId(),正确调用获取选中按钮ID的方法 - 将
file.close改为file.close(),确保文件流正确关闭 - 优化时间差计算函数
td,去掉不必要的self参数,修正字符串分割的写法 - 使用f-string格式化输出字符串,提升代码可读性
内容的提问来源于stack exchange,提问作者Hbethann
相关产品推荐
相关产品推荐

