@@ -24,7 +24,13 @@ def __init__(self, root, mcp):
2424 self .devices_msg = []
2525
2626 self .addr = tk .IntVar ()
27- self .scan_done = tk .IntVar (self , 0 )
27+
28+ # Scan status:
29+ # -1 : in progress
30+ # 0 : done, success
31+ # 1 : done, error
32+ self .scan_status = tk .IntVar ()
33+
2834
2935 self .transient (root )
3036 self .grab_set ()
@@ -35,23 +41,28 @@ def __init__(self, root, mcp):
3541 self .launch_scan ()
3642
3743 self .addr .trace ("w" , self .update_pb )
38- self .scan_done .trace ("w" , self .show_devices )
44+ self .scan_status .trace ("w" , self .show_devices )
3945
4046
4147 def update_pb (self , * args ):
4248 self .pb ["value" ] = self .addr .get () / 0x80 * 100
4349
4450
4551 def launch_scan (self ):
52+ self .scan_status .set (- 1 )
4653 t = Thread (target = self .scan )
4754 t .start ()
4855
4956
5057 def show_devices (self , * args ):
51- if len (self .devices_msg ) == 0 :
52- showinfo ("I2C Scan result" ,"No devices found." )
53- else :
54- showinfo ("I2C Scan result" ,"\n " .join (self .devices_msg ))
58+ if self .scan_status .get () == - 1 : # still in progress
59+ return
60+
61+ if self .scan_status .get () == 0 : # finished successfully
62+ if len (self .devices_msg ) == 0 :
63+ showinfo ("I2C Scan result" ,"No devices found." )
64+ else :
65+ showinfo ("I2C Scan result" ,"\n " .join (self .devices_msg ))
5566
5667 self .destroy ()
5768
@@ -66,13 +77,15 @@ def scan(self):
6677 except NotAckError :
6778 pass
6879 except (TimeoutError , LowSCLError , LowSDAError ) as e :
69- showerror (title = "I2C error" , message = str (e ))
7080 logger .warning ("Error reading I2C bus." + str (e ))
71- break
81+ showerror (title = "I2C error" , message = str (e ))
82+ self .scan_status .set (1 )
83+ return
7284 except RuntimeError as e :
73- showerror (title = "I2C error" , message = "Error reading I2C bus." )
7485 logger .warning ("Error reading I2C bus." + str (e ))
75- break
86+ showerror (title = "I2C error" , message = "Error reading I2C bus." )
87+ self .scan_status .set (1 )
88+ return
7689
77- self .scan_done .set (1 )
90+ self .scan_status .set (0 )
7891
0 commit comments