这是您当前代码中的内容:
你设置
self.espconnecting = False
你打电话
_connect_esp()
哪些调用
_show_conn_progress()
哪套
self.espconnecting = True
启动progressbar
self.sp_pbar.start()
然后打电话
_update_conn_progress()
它检查
self.espconnecting
.
如果
self.esp连接
是
True
(现在是)连接继续,进度条按预期滚动。
如果
self.esp连接
是
False
进度条已停止
self.sp_pbar.stop()
以前
.after()
可以在500毫秒内回调,控件被传递回
_connect_esp
哪套
self.espconnecting=错误
.
然后
之后()
电话
_更新连接进度()
这是为了让酒吧继续营业,
但是(这是你的问题):什么是最后的价值
self.esp连接
?
=False
因此,控制分支到
自行停止()
,它将停止progrss栏。这就是为什么当你注释那一行代码时,你的代码会像预期的那样工作,因为即使控制分支在那里,也不会有任何东西阻止进度条工作。
解决方案
不设置
self.espconnecting=错误
在里面
_连接ESP()
因为以前
之后()
使其在500毫秒内回调,控件将被传递回
_连接ESP()
哪套
self.espconnecting=错误
这会阻止你的进度条工作。
这意味着您必须找到另一种方法来“结束连接”,一旦它开始。
N. B:
我真的不认为有必要
time.sleep(5)
在代码中。
下面是一种可能的解决方法:
...
def __init__( self, master=None, *args, **kw ):
super().__init__( master,style='App.TFrame')
self.master = master
self.espconnecting = False
self.count=0
self._set_style()
self._create_widgets()
def _set_style( self ):
print( '\ndef _set_style( self ):' )
self.style = ttk.Style()
self.style.configure( 'App.TFrame', background='pink')
self.style.configure( 'sp.TFrame', background='light green')
def _create_widgets( self ):
print( '\ndef _create_widgets( self ):' )
self.sp_frame = ttk.Frame( self, style='sp.TFrame' )
self.sp_frame.grid(row=0, column=0)
#self.sp_frame widgets
self.sp_label1 = ttk.Label( self.sp_frame, text='SP(s):')
self.sp_label2 = ttk.Label( self.sp_frame, text='ESP(s):')
self.sp_label3 = ttk.Label( self.sp_frame, )
self.sp_combox = ttk.Combobox( self.sp_frame, state="readonly",
values=['a','b','c'] )
self.sp_combox.bind('<<ComboboxSelected>>', self._connect_esp)
self.sp_pbar = ttk.Progressbar( self.sp_frame, length=200,
mode='indeterminate',
orient=tk.HORIZONTAL, )
self.sp_label1.grid( row=0, column=0 )
self.sp_combox.grid( row=0, column=1, padx=[10,0] )
self.sp_pbar.grid( row=1, column=0, columnspan=2, sticky='ew' )
self.sp_label2.grid( row=2, column=0)
self.sp_label3.grid( row=2, column=1)
def _connect_esp( self, event=None):
print( '\ndef connect_esp( self, event=None ):' )
self._show_conn_progress()
print("START Connection")
time.sleep(5)
def end_connection(self):
print("END Connection")
self.espconnecting = False
def _show_conn_progress( self ):
print( '\ndef _show_conn_progress( self ):' )
self.espconnecting = True
self.sp_label3['text']='Connecting.....'
self.sp_label3.update_idletasks()
self.sp_pbar.start()
self._update_conn_progress()
def _update_conn_progress( self ):
print( '\ndef _update_conn_progress( self ):' )
if not self.espconnecting:
print('connected')
self.sp_pbar.stop()
self.sp_label3['text']='Connected'
else:
print('connecting')
#self.sp_pbar.update_idletasks()
self.after(500, self._update_conn_progress) # Call this method after 500 ms.
self.count=self.count + 1
if self.count==10:
self.end_connection()
def main():
root = tk.Tk()
root.geometry('300x100+0+24')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
app = App( root )
app.grid(row=0, column=0, sticky='nsew')
root.mainloop()
if __name__ == '__main__':
main()