@@ -55,23 +55,6 @@ def __init__(self, parent=None):
5555
5656 # 选择班级下拉框
5757 self .class_name_combo = ComboBox ()
58- self .refresh_class_list () # 初始化班级列表
59- if not get_class_name_list ():
60- self .class_name_combo .setCurrentIndex (- 1 )
61- self .class_name_combo .setPlaceholderText (
62- get_content_name_async ("roll_call_list" , "select_class_name" )
63- )
64- else :
65- self .class_name_combo .setCurrentText (
66- readme_settings_async ("roll_call_list" , "select_class_name" )
67- )
68- self .class_name_combo .currentIndexChanged .connect (
69- lambda : update_settings (
70- "roll_call_list" ,
71- "select_class_name" ,
72- self .class_name_combo .currentText (),
73- )
74- )
7558
7659 # 导入学生名单按钮
7760 self .import_student_button = PushButton (
@@ -147,9 +130,31 @@ def __init__(self, parent=None):
147130 self .export_student_button ,
148131 )
149132
133+ # 初始化班级列表(在所有按钮都创建后)
134+ self .refresh_class_list ()
135+ if not get_class_name_list ():
136+ self .class_name_combo .setCurrentIndex (- 1 )
137+ self .class_name_combo .setPlaceholderText (
138+ get_content_name_async ("roll_call_list" , "select_class_name" )
139+ )
140+ else :
141+ self .class_name_combo .setCurrentText (
142+ readme_settings_async ("roll_call_list" , "select_class_name" )
143+ )
144+ self .class_name_combo .currentIndexChanged .connect (
145+ lambda : update_settings (
146+ "roll_call_list" ,
147+ "select_class_name" ,
148+ self .class_name_combo .currentText (),
149+ )
150+ )
151+
150152 # 设置文件系统监视器
151153 self .setup_file_watcher ()
152154
155+ # 初始化按钮状态
156+ self .update_button_states ()
157+
153158 # 班级名称设置
154159 def set_class_name (self ):
155160 create_set_class_name_window ()
@@ -376,6 +381,18 @@ def on_directory_changed(self, path):
376381 # 延迟刷新,避免文件操作未完成
377382 QTimer .singleShot (500 , self .refresh_class_list )
378383
384+ def update_button_states (self ):
385+ """根据班级列表状态更新按钮禁用状态"""
386+ class_list = get_class_name_list ()
387+ has_class = len (class_list ) > 0
388+
389+ # 禁用/启用相关按钮
390+ self .import_student_button .setEnabled (has_class )
391+ self .name_setting_button .setEnabled (has_class )
392+ self .gender_setting_button .setEnabled (has_class )
393+ self .group_setting_button .setEnabled (has_class )
394+ self .export_student_button .setEnabled (has_class )
395+
379396 def refresh_class_list (self ):
380397 """刷新班级下拉框列表"""
381398 # 保存当前选中的班级名称
@@ -398,6 +415,9 @@ def refresh_class_list(self):
398415 get_content_name_async ("roll_call_list" , "select_class_name" )
399416 )
400417
418+ # 更新按钮状态
419+ self .update_button_states ()
420+
401421 # logger.debug(f"班级列表已刷新,共 {len(class_list)} 个班级")
402422
403423
@@ -415,26 +435,6 @@ def __init__(self, parent=None):
415435
416436 # 选择奖池下拉框
417437 self .pool_name_combo = ComboBox ()
418- self .refresh_pool_list () # 初始化奖池列表
419- saved_pool = readme_settings_async ("lottery_list" , "select_pool_name" )
420- try :
421- if isinstance (saved_pool , int ):
422- if 0 <= saved_pool < self .pool_name_combo .count ():
423- self .pool_name_combo .setCurrentIndex (saved_pool )
424- elif isinstance (saved_pool , str ) and saved_pool :
425- self .pool_name_combo .setCurrentText (saved_pool )
426- except Exception :
427- pass
428- if not get_pool_name_list ():
429- self .pool_name_combo .setCurrentIndex (- 1 )
430- self .pool_name_combo .setPlaceholderText (
431- get_content_name_async ("lottery_list" , "select_pool_name" )
432- )
433- self .pool_name_combo .currentIndexChanged .connect (
434- lambda : update_settings (
435- "lottery_list" , "select_pool_name" , self .pool_name_combo .currentText ()
436- )
437- )
438438
439439 # 导入奖品名单按钮
440440 self .import_prize_button = PushButton (
@@ -500,9 +500,34 @@ def __init__(self, parent=None):
500500 self .export_prize_button ,
501501 )
502502
503+ # 初始化奖池列表(在所有按钮都创建后)
504+ self .refresh_pool_list ()
505+ saved_pool = readme_settings_async ("lottery_list" , "select_pool_name" )
506+ try :
507+ if isinstance (saved_pool , int ):
508+ if 0 <= saved_pool < self .pool_name_combo .count ():
509+ self .pool_name_combo .setCurrentIndex (saved_pool )
510+ elif isinstance (saved_pool , str ) and saved_pool :
511+ self .pool_name_combo .setCurrentText (saved_pool )
512+ except Exception :
513+ pass
514+ if not get_pool_name_list ():
515+ self .pool_name_combo .setCurrentIndex (- 1 )
516+ self .pool_name_combo .setPlaceholderText (
517+ get_content_name_async ("lottery_list" , "select_pool_name" )
518+ )
519+ self .pool_name_combo .currentIndexChanged .connect (
520+ lambda : update_settings (
521+ "lottery_list" , "select_pool_name" , self .pool_name_combo .currentText ()
522+ )
523+ )
524+
503525 # 设置文件系统监视器
504526 self .setup_file_watcher ()
505527
528+ # 初始化按钮状态
529+ self .update_button_states ()
530+
506531 # 奖池名称设置
507532 def set_pool_name (self ):
508533 create_set_pool_name_window ()
@@ -715,6 +740,17 @@ def on_directory_changed(self, path):
715740 # 延迟刷新,避免文件操作未完成导致的错误
716741 QTimer .singleShot (500 , self .refresh_pool_list )
717742
743+ def update_button_states (self ):
744+ """根据奖池列表状态更新按钮禁用状态"""
745+ pool_list = get_pool_name_list ()
746+ has_pool = len (pool_list ) > 0
747+
748+ # 禁用/启用相关按钮
749+ self .import_prize_button .setEnabled (has_pool )
750+ self .prize_setting_button .setEnabled (has_pool )
751+ self .prize_weight_setting_button .setEnabled (has_pool )
752+ self .export_prize_button .setEnabled (has_pool )
753+
718754 def refresh_pool_list (self ):
719755 """刷新奖池下拉框列表"""
720756 # 保存当前选中的奖池名称
@@ -737,4 +773,7 @@ def refresh_pool_list(self):
737773 get_content_name_async ("lottery_list" , "select_pool_name" )
738774 )
739775
776+ # 更新按钮状态
777+ self .update_button_states ()
778+
740779 # logger.debug(f"奖池列表已刷新,共 {len(pool_list)} 个奖池")
0 commit comments