如何从子窗口获取GUI主窗口中的数据?

2024-09-28 05:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习Python并试图建立一个GUI。我面临的问题如下:

在我的代码中,我试图从用户那里获取输入,当选中“ausgewalte”复选框时,该复选框打开子窗口并允许用户输入数据。现在我必须在主GUI中告诉您,要么从子窗口获取数据,要么根据“Alle”或“Ausgewahlte”之间的选择使用默认数据。在

首先,我不能使用在主GUI的子窗口中定义的数据。在

如果你们中有人能帮忙,那就太好了。在

在期待中感谢你!!!在

问候

`

import Tkinter
import tkSimpleDialog

class PST_TEG(Tkinter.Tk):

    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):

        # Label
         self.grid()
         label = Tkinter.Label(self,text="Projekt Root Ordner Name :",anchor="w").grid(column=0,row=0,columnspan=1,sticky='EW')
         label = Tkinter.Label(self,text="Projekt Name :",anchor="w").grid(column=0,row=1,columnspan=1,sticky='EW')
         label = Tkinter.Label(self,text="Experiment Name :",anchor="w").grid(column=0,row=2,columnspan=1,sticky='EW')        
         label = Tkinter.Label(self,text="Plattform Name :",anchor="w").grid(column=0,row=3,columnspan=1,sticky='EW')
         label = Tkinter.Label(self,text="Anzahl der Szenarien :",anchor="w").grid(column=0,row=4,columnspan=1,sticky='EW')
         label = Tkinter.Label(self,text="Temperatur Kuhlwasser :",anchor="w").grid(column=0,row=5,columnspan=1,sticky='EW')
         label = Tkinter.Label(self,text="Szenarien :",anchor="w").grid(column=0,row=6,columnspan=1,sticky='EW')

        # Entry 

         self.entry1=Tkinter.Entry(self)
         self.entry1.grid(column=1,row=0,sticky='EW',pady=5)
         self.entry2=Tkinter.Entry(self)
         self.entry2.grid(column=1,row=1,sticky='EW',pady=5)
         self.entry3=Tkinter.Entry(self)
         self.entry3.grid(column=1,row=2,sticky='EW',pady=5)
         self.entry4=Tkinter.Entry(self)
         self.entry4.grid(column=1,row=3,sticky='EW',pady=5)
         self.entry5=Tkinter.Entry(self)
         self.entry5.grid(column=1,row=4,sticky='EW',pady=5)
         self.entry6=Tkinter.Entry(self)
         self.entry6.grid(column=1,row=5,sticky='EW',pady=5)


        # Checkbutton
         global CheckVar1
         global CheckVar2
         global Checkbutton1
         global Checkbutton2
         CheckVar1= Tkinter.IntVar()
         CheckVar2=Tkinter.IntVar()
         Checkbutton1=Tkinter.Checkbutton(self, text="Alle Szenarien",variable=CheckVar1,command=self.alle).grid(column=1,row=6,pady=10,sticky='W')
         Checkbutton2=Tkinter.Checkbutton(self, text="Ausgewählte",variable=CheckVar2,command=self.selected).grid(column=1,row=6,padx=110,sticky='W')

        # Button

         button1 = Tkinter.Button(self,text=u"Übernehmen",command=self.Uebernehmen)
         button1.grid(column=1,row=8,pady=10,columnspan=1,sticky='W')
         button2 = Tkinter.Button(self,text=u"Reset",command=self.clear_fields)
         button2.grid(column=1,row=8,pady=10,padx=90,sticky='W')

    def OnButtonClick(self):

        global Anzahl_Szenarien1
        global Anfang_Temperatur1
        global Szenario_all
        global Szenario_all1
        global Szenario_selected
        global ProjectRoot1
        global ProjectName1
        global ExperimentName1
        global PlatformName1

        ProjectRoot1=self.entry1.get()
        ProjectName1=self.entry2.get()
        ExperimentName1=self.entry3.get()
        PlatformName1= self.entry4.get()
        Anzahl_Szenarien1 = int(self.entry5.get())
        Anfang_Temperatur1 = int(self.entry6.get())

        print 'Projekt ordner: %s' % ProjectRoot1
        print 'Projekt Name: %s' % ProjectName1
        print 'Experiment Name: %s' % ExperimentName1
        print 'Platform Name: %s' % PlatformName1
        print 'Anzahl Szenarien: %d' % Anzahl_Szenarien1
        print 'Temperatur Kuhlwasser: %d' % Anfang_Temperatur1




    def clear_fields(self):

        self.entry1.delete(0, 'end')
        self.entry2.delete(0, 'end')
        self.entry3.delete(0, 'end')
        self.entry4.delete(0, 'end')
        self.entry5.delete(0, 'end')
        self.entry6.delete(0, 'end')

        if(CheckVar1.get()):
           CheckVar1.set(0)

        if(CheckVar2.get()):
           CheckVar2.set(0)

    def new_data(self,data):
        Szenario_all=data
        self.OnButtonClick()
        print Szenario_all

    def alle(self):


         self.OnButtonClick()
         all=Anzahl_Szenarien1
         all=all+1
         Szenario_all=list(range(1,all))
         print Szenario_all

    def selected(self):

        child_window(self.parent)         

    def Uebernehmen(self):

        master.destroy()

class child_window(Tkinter.Tk):

    def __init__(self,parent):
        self.root = Tkinter.Toplevel(parent)
        label = Tkinter.Label(self.root,text="Bitte geben Sie die Szenarien nummer ein :",anchor="w").grid(column=0,row=0,columnspan=1,sticky='EW')
        self.root.entry1=Tkinter.Entry(self.root)
        self.root.entry1.grid(column=0,row=1,sticky='EW',padx=10)

        self.ok_button = Tkinter.Button(self.root,text=u"OK",command=self.closechild).grid(column=1,row=2,pady=10,columnspan=1,sticky='W')


    def closechild(self):

        Szenario_all1= self.root.entry1.get()
        self.parent.new_data(Szenario_all1) 

        self.root.destroy()



if __name__ == "__main__":

    master = PST_TEG(None)
    master.title('PST TEG')
    w = 400
    h = 275 
    ws = master.winfo_screenwidth() 
    hs = master.winfo_screenheight() 
    x = (ws/2) - (w/2)
    y = (hs/2) - (h/2)
    master.geometry('%dx%d+%d+%d' % (w, h, x, y))
    master.mainloop()`

Tags: textselftkinterdefcolumnallgloballabel
3条回答

这是一个从子窗口修改父窗口的示例。在

selected()方法中传递self参数,该参数将是子窗口的父窗口。在

def selected(self):
    child_window(self)

您可以按如下方式更改子窗口:

^{pr2}$

如果我做对了。。。 对于这种类型的输入(我想是字符串),您可以使用

tkSimpleDialog.askstring(title, prompt [,options])

创建对话框。此函数返回输入的字符串。在

我将使用另一个条目作为“Ausgewahlte”选项。最初,您可以将该条目设置为禁用,这样就无法输入文本。在

self.entry7=Tkinter.Entry(self, state = 'disabled')

选中“Ausgewahlte”复选框后,您可以启用允许用户输入其文本的条目。在

^{pr2}$

另外,我会避免使用全局变量,您可以将它们添加到类中,如下所示:

self.variableName = ...

所以最后我会这样做:

import Tkinter
import tkSimpleDialog

class PST_TEG(Tkinter.Tk):

def __init__(self,parent):
    Tkinter.Tk.__init__(self,parent)
    self.parent = parent
    self.initialize()

def initialize(self):

    # Label
    self.grid()
    label = Tkinter.Label(self,text="Projekt Root Ordner Name :",anchor="w").grid(column=0,row=0,columnspan=1,sticky='EW')
    label = Tkinter.Label(self,text="Projekt Name :",anchor="w").grid(column=0,row=1,columnspan=1,sticky='EW')
    label = Tkinter.Label(self,text="Experiment Name :",anchor="w").grid(column=0,row=2,columnspan=1,sticky='EW')        
    label = Tkinter.Label(self,text="Plattform Name :",anchor="w").grid(column=0,row=3,columnspan=1,sticky='EW')
    label = Tkinter.Label(self,text="Anzahl der Szenarien :",anchor="w").grid(column=0,row=4,columnspan=1,sticky='EW')
    label = Tkinter.Label(self,text="Temperatur Kuhlwasser :",anchor="w").grid(column=0,row=5,columnspan=1,sticky='EW')

    label = Tkinter.Label(self,text="Ausgewahlte :",anchor="w").grid(column=0,row=6,columnspan=1,sticky='EW')

    label = Tkinter.Label(self,text="Szenarien :",anchor="w").grid(column=0,row=7,columnspan=1,sticky='EW')
    # Entry 

    self.entry1=Tkinter.Entry(self)
    self.entry1.grid(column=1,row=0,sticky='EW',pady=5)
    self.entry2=Tkinter.Entry(self)
    self.entry2.grid(column=1,row=1,sticky='EW',pady=5)
    self.entry3=Tkinter.Entry(self)
    self.entry3.grid(column=1,row=2,sticky='EW',pady=5)
    self.entry4=Tkinter.Entry(self)
    self.entry4.grid(column=1,row=3,sticky='EW',pady=5)
    self.entry5=Tkinter.Entry(self)
    self.entry5.grid(column=1,row=4,sticky='EW',pady=5)
    self.entry6=Tkinter.Entry(self)
    self.entry6.grid(column=1,row=5,sticky='EW',pady=5)
    self.entry7=Tkinter.Entry(self, state = 'disabled')
    self.entry7.grid(column=1,row=6,sticky='EW',pady=5)


    # Checkbutton
    self.CheckVar1= Tkinter.IntVar()
    self.CheckVar2=Tkinter.IntVar()
    self.Checkbutton1=Tkinter.Checkbutton(self, text="Alle Szenarien",variable=self.CheckVar1,command=self.alle).grid(column=1,row=7,pady=10,sticky='W')
    self.Checkbutton2=Tkinter.Checkbutton(self, text="Ausgewahlte",variable=self.CheckVar2,command=self.selected).grid(column=1,row=7,padx=110,sticky='W')
    # Button

    button1 = Tkinter.Button(self,text=u"Ubernehmen",command=self.Uebernehmen)
    button1.grid(column=1,row=10,pady=10,columnspan=1,sticky='W')
    button2 = Tkinter.Button(self,text=u"Reset",command=self.clear_fields)
    button2.grid(column=1,row=10,pady=10,padx=90,sticky='W')

def OnButtonClick(self):

    self.ProjectRoot1=self.entry1.get()
    self.ProjectName1=self.entry2.get()
    self.ExperimentName1=self.entry3.get()
    self.PlatformName1= self.entry4.get()
    self.Anzahl_Szenarien1 = int(self.entry5.get())
    self.Anfang_Temperatur1 = int(self.entry6.get())

    print 'Projekt ordner: %s' % self.ProjectRoot1
    print 'Projekt Name: %s' % self.ProjectName1
    print 'Experiment Name: %s' % self.ExperimentName1
    print 'Platform Name: %s' % self.PlatformName1
    print 'Anzahl Szenarien: %d' % self.Anzahl_Szenarien1
    print 'Temperatur Kuhlwasser: %d' % self.Anfang_Temperatur1


def clear_fields(self):

    self.entry1.delete(0, 'end')
    self.entry2.delete(0, 'end')
    self.entry3.delete(0, 'end')
    self.entry4.delete(0, 'end')
    self.entry5.delete(0, 'end')
    self.entry6.delete(0, 'end')
    self.entry7.delete(0, 'end')
    self.entry7['state'] = 'disabled'

    if(self.CheckVar1.get()):
       self.CheckVar1.set(0)

    if(self.CheckVar2.get()):
       self.CheckVar2.set(0)

def new_data(self,data):
    self.Szenario_all = data
    self.OnButtonClick()
    print Szenario_all

def alle(self):
    self.OnButtonClick()
    all = self.Anzahl_Szenarien1
    all = all+1
    Szenario_all = list(range(1,all))
    print Szenario_all

def selected(self):
    self.entry7['state'] = 'normal' 

def Uebernehmen(self):
    master.destroy()



if __name__ == "__main__":

master = PST_TEG(None)
master.title('PST TEG')
w = 400
h = 290 
ws = master.winfo_screenwidth() 
hs = master.winfo_screenheight() 
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
master.geometry('%dx%d+%d+%d' % (w, h, x, y))
master.mainloop()

相关问题 更多 >

    热门问题