在另一个类中获取条目文本

时间:2014-07-05 07:36:24

标签: python class tkinter tkinter-entry

我正在使用Tkinter on python 2.7.8

我有两个类,每个类都创建一个窗口。在Interface类中,创建了根窗口,并使用顶级函数调用第二个窗口。

根窗口有一个条目,第二个窗口只有一个标签,所以我想实时给出标签(在第二个窗口中)(根窗口)的条目,所以我不会#39 ; t想要点击按钮来提供文字。

我试过了:

from Tkinter import *

class Interface(Frame):


    def __init__(self, fenetre, **kwargs):
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)

        self.textA = StringVar()
        self.textE = Entry(self, textvariable=self.textA, width=30)
        self.textE.pack()
        self.getT = self.textA.get()

        self.newWindow = Toplevel(fenetre)
        self.app = Interface2(self.newWindow)

class Interface2(Frame):


    def __init__(self, fenetre, **kwargs):
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)
        fenetre.geometry("700x700")

        self.textInRealTime = Label(self, text=interface.getT) #NameError: global name 'interface' is not defined

        self.textInRealTime.pack()


fenetre = Tk()
interface = Interface(fenetre)

interface.mainloop()
interface.destroy()

所以,在注释行的Interface2类中,我尝试了这个text=interface.getT并得到了

NameError: global name 'interface' is not defined

我也尝试过此text=Interface.getT并收到此错误#AttributeError: class Interface has no attribute 'getT'

如何实时将第一堂课进入第二堂课?

2 个答案:

答案 0 :(得分:1)

@mhawke,谢谢你如何将变量传递给其他类!!所以 我做到了 !!使用简单的线程将文本实时传输到另一个窗口:) 这是代码:

from Tkinter import *
from threading import Thread

def updateA(textA, tempText):
    while 1:
        tempText.set(textA.get())

class Interface(Frame):


    def __init__(self, fenetre, **kwargs):
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)

        self.textA = StringVar()
        self.textE = Entry(self, textvariable=self.textA, width=30)
        self.textE.pack()


        self.newWindow = Toplevel(fenetre)
        self.app = Interface2(self.newWindow, self.textA)

class Interface2(Frame):


    def __init__(self, fenetre, textA, **kwargs):
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)
        fenetre.geometry("700x700")

        self.tempText = StringVar()
        self.textW = Label(self, textvariable=self.tempText)
        self.textW.pack()
        t = Thread(target=updateA, args=(textA,self.tempText))
        t.start()


fenetre = Tk()
interface = Interface(fenetre)

interface.mainloop()
interface.destroy()

答案 1 :(得分:0)

textA StringVariableInterface传递到Interface2.__init__(),然后使用Label()将其传递到textvariable

对相关StringVariable的任何更改都会导致标签立即更新。这个答案中有一些信息https://stackoverflow.com/a/1918054/21945。这是一些有效的代码:

from Tkinter import *

class Interface(Frame):
    def __init__(self, fenetre, **kwargs):
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)

        self.textA = StringVar()
        self.textE = Entry(self, textvariable=self.textA, width=30)
        self.textE.pack()
        self.getT = self.textA.get()

        self.newWindow = Toplevel(fenetre)
        self.app = Interface2(self.newWindow, self.textA)    # note extra StringVariable argument passed to Interface2 constructor

class Interface2(Frame):
    def __init__(self, fenetre, textA, **kwargs):    # note extra StringVariable parameter "textA"
        Frame.__init__(self, fenetre, width=0, height=0, **kwargs)
        self.pack(fill=BOTH)
        fenetre.geometry("700x700")

        self.textInRealTime = Label(self, textvariable=textA)    # note textvariable set to StringVariable
        self.textInRealTime.pack()

fenetre = Tk()
interface = Interface(fenetre)

interface.mainloop()
interface.destroy()