我希望这不是重复的,看来我是谁喜欢使用的Tkinter作为Tkinter的,而不是传统知识少数人之一....所以几乎我使用类,使窗口。第二个窗口创建了一个用户,但我使用的值“用户名”,在不同的类有麻烦。我在想什么?
(免责声明,窗户被丑陋的,我专注于制作功能工作)。我试图使价值用户名clicku()
函数的全局一部分....我试图使“用户名”下Startwindow
功能(有自己的定义),我试过直接把它(如图)......我四处移动它,试图与地方工作...我迷路了。会使得进入自己的类保存这个问题... ???
from tkinter import *
class Window(Frame):
def __init__(self, master=None, *args, **kwargs):
Frame.__init__(self,master,*args,**kwargs)
self.pack()
self.pack_propagate(0)
self.labelone = Label(self, text = "Welcome to our class! Click start to begin")
self.labelone.grid(row=1,column=1)
self.buttonone = Button(self, text="start", command=click)
self.buttonone.grid(row=2,column=1)
class Startwindow(Frame):
def __init__(self, master=None, *args, **kwargs):
Frame.__init__(self,master,*args,**kwargs)
self.grid(row=5,column=5)
self.grid_propagate(0)
self.text = Label(self, text = "What is your name?")
self.text.grid(row=0,column=0)
self.entry = Entry(self, width=15)
self.entry.grid(row=1,column=0)
self.buttontwo = Button(self, text="enter", command=clicku)
self.buttontwo.grid(row=1,column=1)
self.username = self.entry.get()
class introwindow(Frame):
def __init__(self, master=None,*args,**kwargs):
Frame.__init__(self,master,*args,**kwargs)
user = str(w2.username)
self.grid()
self.grid_propagate(0)
self.a = Label(self, text = "Aki: ")
self.a.grid(row = 0, column = 0)
self.sp1 = Label(self, text = "Hi" + w2.username)
self.sp1.grid(row = 0, column = 1)
self.sp2 = Label(self, text = "Nice to meet you!")
self.sp1.grid(row = 1, column = 1)
self.talk = Entry(self, width = 15)
def click():
global w2
w.destroy()
w2 = Startwindow(root,width=500,height=500)
def clicku():
w2.destroy()
w3 = introwindow(root,width=500,height=500)
root = Tk()
w = Window(root, bg="red",width=500,height=500)
root.mainloop()
我只是希望能够让用户名打印在introwindow
作为Label
sp1
的一部分。
由于您的输入窗口小部件是introwindow
的属性,你只需要你破坏了窗口前致电get
方法上的输入窗口小部件。然后,您可以将值传递到下一个窗口的构造函数
例如,它会是这个样子:
def clicku():
name = w2.entry.get()
print("clickU:", name)
w2.destroy()
w3 = IntroWindow(root, width=500, height=500, name=name)
当然,你需要修改IntroWindow
类接受该名称。
你可以通过创建一个tkinter
StringVar
的全局实例做到这一点。这里的这样做,在你的问题发布的代码(我也更新更紧密地跟随PEP 8 - Style Guide for Python Code)。
您当前的设计不允许使其物尽其用(这就是为什么我做了一个全局变量)。但是,以供将来参考,这里是他们如何使用一些additional information。
from tkinter import *
class Window(Frame):
def __init__(self, master=None, *args, **kwargs):
Frame.__init__(self, master, *args, **kwargs)
self.pack()
self.pack_propagate(0)
self.labelone = Label(self, text="Welcome to our class! Click start to begin")
self.labelone.grid(row=1, column=1)
self.buttonone = Button(self, text="start", command=click)
self.buttonone.grid(row=2,column=1)
class StartWindow(Frame):
def __init__(self, master=None, *args, **kwargs):
Frame.__init__(self, master, *args, **kwargs)
self.grid(row=5,column=5)
self.grid_propagate(0)
self.text = Label(self, text="What is your name?")
self.text.grid(row=0,column=0)
self.entry = Entry(self, width=15, textvariable=username)
self.entry.grid(row=1,column=0)
self.buttontwo = Button(self, text="enter", command=clicku)
self.buttontwo.grid(row=1,column=1)
self.username = self.entry.get()
class IntroWindow(Frame):
def __init__(self, master=None, *args, **kwargs):
Frame.__init__(self,master, *args, **kwargs)
self.grid()
self.grid_propagate(0)
self.a = Label(self, text="Aki: ")
self.a.grid(row=0, column=0)
self.sp1 = Label(self, text="Hi " + username.get())
self.sp1.grid(row=0, column=1)
self.sp2 = Label(self, text="Nice to meet you!")
self.sp1.grid(row=1, column=1)
self.talk = Entry(self, width=15)
def click():
global w2
w.destroy()
w2 = StartWindow(root, width=500, height=500)
def clicku():
w2.destroy()
w3 = IntroWindow(root, width=500, height=500)
if __name__ == '__main__':
root = Tk()
username = StringVar()
w = Window(root, bg="red", width=500, height=500)
root.mainloop()