したがって、2つのクラスがあります.ApplicationWindowはmain、LoginWindowはmainのトップレベルです。だから私は入力された値をトップレベルウィンドウからメインのself.LOGINとself.PASSWに戻すことはできません。 SOを介して見られた - 私を助けることが何も見つかりませんでした。手伝って頂けますか?Tkinter、トップレベルウィンドウから値を取得
マイコード:
import os
import sys
import tkinter as tk
class ApplicationWindow(tk.Tk):
def __init__(self, master=None):
# print(l,p)
self.LOGIN = "555"
self.PASSW = "666"
self.master = master
self.master.geometry('800x400')
self.master.title("app")
self.master.f_app = tk.Frame(self.master).pack()
self.menuBuild()
self.b_log = tk.Button(self.master, width=10, text="button").pack()
def menuBuild(self):
menubar = tk.Menu(self.master)
self.master.config(menu=menubar)
mainMenu = tk.Menu(menubar, tearoff=0)
mainMenu.add_command(label="Login", command=self.login)
mainMenu.add_separator()
mainMenu.add_command(label="Exit", command=self.onExit)
menubar.add_cascade(label="File", menu=mainMenu)
def login(self):
self.tl_log = tk.Toplevel(self.master)
self.login = LoginWindow(self.tl_log)
def onExit(self):
self.master.destroy()
class LoginWindow(tk.Tk):
def __init__(self, master=None):
self.master = master
self.master.title("login")
self.master.f_login = tk.Frame(self.master)
self.master.geometry("300x100")
self.l_log = tk.Label(self.master, text="mailbox")
self.l_psw = tk.Label(self.master, text="password")
self.e_log = tk.Entry(self.master, width=25)
self.e_psw = tk.Entry(self.master, show="*", width=25)
self.b_log = tk.Button(self.master, width=10, text="login", command=self.func)
self.l_log.grid(row=1, column=1)
self.l_psw.grid(row=2, column=1)
self.e_log.grid(row=1, column=2)
self.e_psw.grid(row=2, column=2)
self.b_log.grid(row=3, column=1, columnspan=2)
def func(self):
l = self.e_log.get()
p = self.e_psw.get()
if l == "" or " " in l:
print("not")
else:
return l, p
self.master.destroy()
def main():
root = tk.Tk()
main = ApplicationWindow(root)
root.mainloop()
if __name__ == '__main__':
main()
なしなし!オブジェクトを 'Tk'インスタンスとして使用しない場合、' tk.Tk'から継承しないでください!今は問題がないかもしれませんが、 'super().__ init __(master)'を継承すれば、どのように爆発しているのか分かります。 –
return文の後に 'self.master.destroy()'を置くことは決して実行されないことを意味し、 'return'はその関数を終了します。 –
_one_ classに 'Tk'を継承させても構いませんが、複数のクラスを持つべきではありません。 –