如何将一个GUI窗口链接到另一个GUI窗口

时间:2015-06-03 16:55:10

标签: python tkinter

我有两个单独的Python代码,我希望如果单击第一个GUI上的按钮,则应打开一个新的GUI窗口并将其输入到输入字段中。

单击第一个GUI上的按钮后,我能够成功打开一个新的GUI窗口,但是第二个窗口没有输入我的输入。有人可以检查我的代码,并告诉我为什么我的第二个GUI没有采取和输入。我粘贴了我的两个python代码的一部分,以保持简洁。

当我在第一个代码中单击YES按钮时,将打开一个新的Python GUI窗口,但是当我在输入字段中输入值并按下Pipe 1 FWD Button时,代码不会接受此输入。

第一和第二代码:

import sys
from Tkinter import *
import Prog2 as ofnew
def askOffsets():
    print 'Correct till here'
    of = ofnew.AddOffset()
mGui = Tk()
mGui.geometry('1000x600+150+100')
buttonYesOffsets = Button(text = 'YES', command = askOffsets)
buttonYesOffsets.place(x = 300, y = 350)
mGui.mainloop()
import sys
from Tkinter import *
import time, datetime
from numpy import arange

class AddOffset():

    def getOffsetsPipe1FWD(self):
        print 'Correct'
        temp1 = self.StartFreqOffsets.get()
        print temp1

    def __init__(self):
        self.mOffsets = Tk()
        self.mOffsets.geometry('1000x600+100+100')
        self.mOffsets.title('Enter the Offsets')
        self.StartFreqOffsets = DoubleVar()
        self.StartFreqOffsets.set(1)
        labelenterStartFreqOffsets = Label(self.mOffsets, text = 'Enter the Start Frequency (in MHz):')
        labelenterStartFreqOffsets.place(x = 0, y = 50)
        self.entryStartFreqOffsets = Entry(self.mOffsets, textvariable = self.StartFreqOffsets).place(x = 250, y = 50)

        buttonPipe1FWD = Button(self.mOffsets, text = 'Pipe 1 FWD', command = self.getOffsetsPipe1FWD)
        buttonPipe1FWD.place(x = 30, y = 300)
        self.mOffsets.mainloop()

2 个答案:

答案 0 :(得分:1)

在单个Tkinter应用程序中,您应该只创建 Tk 的单个实例,并且您应该只调用 mainloop 一次。在您的情况下,每个文件都创建自己的 Tk 实例。





如果你想要多个窗口,除了根窗口之外的每个窗口都需要是 Toplevel 的实例。




答案 1 :(得分:0)

当使用Toplevel时,程序会为多个新窗口正确打印Entry小部件的内容。代码修改为来自一个文件而不是两个

from Tkinter import *
##import Prog2 as ofnew
import sys
##from Tkinter import *
import time, datetime
##from numpy import arange

class AddOffset():

    def getOffsetsPipe1FWD(self):
        print 'Correct'
        temp1 = self.StartFreqOffsets.get()
        print temp1

    def __init__(self, top):
        self.mOffsets = Toplevel(top)
        ## all new windows will be at the same location
        ## (on top of each other)
        self.mOffsets.geometry('1000x600+100+100')
        self.mOffsets.title('Enter the Offsets')
        self.StartFreqOffsets = DoubleVar()
        self.StartFreqOffsets.set(1)
        labelenterStartFreqOffsets = Label(self.mOffsets, text = 'Enter the Start Frequency (in MHz):')
        labelenterStartFreqOffsets.place(x = 0, y = 50)
        Entry(self.mOffsets, textvariable = self.StartFreqOffsets).place(x = 250, y = 50)

        buttonPipe1FWD = Button(self.mOffsets, text = 'Pipe 1 FWD',
                                command = self.getOffsetsPipe1FWD)
        buttonPipe1FWD.place(x = 30, y = 300)

def askOffsets():
    print 'Correct till here'
    of = AddOffset(mGui)

mGui = Tk()
mGui.geometry('1000x600+150+100')
buttonYesOffsets = Button(text = 'YES', command = askOffsets)
buttonYesOffsets.place(x = 300, y = 350)
mGui.mainloop()