如何在不同的类中使用一个帖子内容?

问题描述 投票:1回答:2

我希望这不是重复的,看来我是谁喜欢使用的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的一部分。

python function class tkinter frames
2个回答
0
投票

由于您的输入窗口小部件是introwindow的属性,你只需要你破坏了窗口前致电get方法上的输入窗口小部件。然后,您可以将值传递到下一个窗口的构造函数

例如,它会是这个样子:

def clicku():
    name = w2.entry.get()
    print("clickU:", name)
    w2.destroy()
    w3 = IntroWindow(root, width=500, height=500, name=name)

当然,你需要修改IntroWindow类接受该名称。


0
投票

你可以通过创建一个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()
© www.soinside.com 2019 - 2024. All rights reserved.