Я хочу передать идентификатор переменной в функции read_card (), которая была прочитана MFRC522, в класс MenuPage. MenuPage - это новая рамка Tkinter, которую я хочу открыть. Почему-то это не работает. Я получаю ошибку аргумента. Он ожидает 3 аргумента, но я даю только 2. Вы можете мне помочь?
import Tkinter as tk
from PIL import Image, ImageTk
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
import tkMessageBox
def on_closing():
if tkMessageBox.askokcancel("Beenden", "Wollen Sie Pi Banking beenden?"):
app.destroy()
def read_card():
reader = SimpleMFRC522()
try:
id, text = reader.read_no_block()
if id != None:
menuPage = MenuPage(id)
app.switch_frame(menuPage)
else:
tkMessageBox.showerror("Fehler", "Die Karte konnte nicht gelesen werden. Bitte halten Sie Ihre Karte zum NFC-Kontaktpunkt und versuchen Sie es erneut.")
finally:
GPIO.cleanup()
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(MainPage)
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class MainPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
master.title("Pi Banking")
master.attributes('-zoomed', True)
label = tk.Label(self, text="Pi Banking", font=("Helvetica", 48, 'bold'))
label.pack(padx=20, pady=20)
self.logo = ImageTk.PhotoImage(Image.open("Raspi.png"))
panel = tk.Label(self, image = self.logo)
panel.pack()
label = tk.Label(self, text="Bitte halten Sie Ihre Karte zum NFC-Kontaktpunkt und klicken Sie auf \"Karte lesen\"!", font=("Helvetica", 16))
label.pack(padx=20, pady=20)
button = tk.Button(self, text="Karte lesen", font=("Helvetica", 16), command=read_card)
button.pack()
class MenuPage(tk.Frame):
def __init__(self, master, card_id):
self.card_id = card_id
tk.Frame.__init__(self, master)
master.title("Pi Banking - Menu")
if __name__ == "__main__":
app = App()
app.protocol("WM_DELETE_WINDOW", on_closing)
app.mainloop()
Я получаю ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
return self.func(*args)
File "bankomat.py", line 20, in read_card
menuPage = MenuPage(id)
TypeError: __init__() takes exactly 3 arguments (2 given)