我正在編寫一個Python程序,用於監聽RFID輸入,並且只在出現有效令牌時才運行。該程序還有一個我想用TkInter構建的GUI。如果調用另一個函數,TkInter框架不會加載
拼圖的兩個部分都可以很好地隔離,但是因爲它似乎可以選擇其中之一 - 但不能同時兼得!我可以很好地畫出我的TkInter窗口,但是如果我調用該函數開始監聽RFID輸入,然後該位運行正常並且可以正常工作...則不需要GUI。
代碼如下。你可以看到我的調試工作,到目前爲止我的打印輸出到終端...
#!/usr/bin/env python3 import sys import MySQLdb if sys.version_info[0] == 2: from Tkinter import * import Tkinter as ttk else: from tkinter import * import tkinter as ttk class Fullscreen_Window: def __init__(self): self.tk = Tk() self.frame = Frame(self.tk) self.frame.pack() ttk.Button(self.tk, text="hello world").pack() self.tk.attributes('-zoomed', True) self.state = False self.tk.bind("<F11>", self.toggle_fullscreen) self.tk.bind("<Escape>", self.end_fullscreen) print("init running") self.listen_rfid() # Commenting this out makes the GUI appear, uncommenting means no GUI :( def toggle_fullscreen(self, event=None): self.state = not self.state # Just toggling the boolean self.tk.attributes("-fullscreen", self.state) print("Toggling") return "break" def end_fullscreen(self, event=None): self.state = False self.tk.attributes("-fullscreen", False) return "break" def listen_rfid(self): print("Main loop running") dbHost = 'localhost' dbName = 'python' dbUser = 'python' dbPass = 'PASSWORD' dbConnection = MySQLdb.connect(host=dbHost, user=dbUser, passwd=dbPass, db=dbName) cur = dbConnection.cursor(MySQLdb.cursors.DictCursor) with open('/dev/stdin', 'r') as tty: while True: RFID_input = tty.readline().rstrip() cur.execute("SELECT * FROM access_list WHERE rfid_code = '%s'" % (RFID_input)) if cur.rowcount != 1: print("ACCESS DENIED") else: user_info = cur.fetchone() print("Welcome %s!!" % (user_info['name'])) tty.close() listen_rfid() if __name__ == '__main__': w = Fullscreen_Window() w.tk.mainloop()
我敢肯定,這是很簡單的東西,但因爲我一個Python/Tkinter的的n00b它的毆打我和我所有的完成谷歌搜索。任何幫助感激地收到:)
「Fulscreen_Window.listen_rfid」調用定義的函數「listen_rfid」在哪裏?那應該是'self.listen_rfid'? – FamousJameous
在定義「end_fullscreen」函數之後,它在第38行定義。 –
那麼你的意思是'self.listen_rfid'? – FamousJameous