2015-06-03 2 views
0

У меня есть два отдельных кода Python, и я хочу, чтобы, если я нажму кнопку на первом графическом интерфейсе, тогда откроется новое окно графического интерфейса пользователя и откроется во входном поле.Как связать одно окно GUI с другим

Я смог успешно открыть новое окно GUI после нажатия кнопки в первом графическом интерфейсе, но второе окно не принимает ввода. Может кто-то, пожалуйста, проверьте мой код и скажите, почему мой второй графический интерфейс не принимает и не вводит. Я вставляю часть своих двух кодов питона, чтобы сохранить ее кратким.

Когда я нажимаю кнопку ДА в первом коде, открывается новое окно GUI Python, но когда я ввожу значения в поле ввода и нажимаю кнопку FWD Pipe 1, код не принимает этот ввод.

Первый и второй коды:

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() 

ответ

1

В одном приложении Tkinter, вы должны только когда-либо создать один экземпляр Tk, и вы должны всегда называть mainloop ровно один раз. В вашем случае каждый файл создает свой собственный экземпляр Tk.

Если вам нужно несколько окон, каждое окно, но корневое окно должно быть экземпляром Toplevel.

+0

Да, я думаю, что в целом для других окон мы должны использовать экземпляры 'Toplevel' виджета, но это не всегда так, по крайней мере, это то, что Я читал один раз, я думаю, на сайте effbot.org. Мы знаем, что для каждого экземпляра «Tk» есть связанный интерпретатор Tcl, работающий в фоновом режиме (если я не ошибаюсь), поэтому в случае нескольких экземпляров Tk у нас есть несколько интерпретаторов Tcl, работающих в фоновом режиме. Итак, если это правильно, есть ли какая-то конкретная ситуация, когда было бы полезно использовать более одного интерпретатора Tcl, работающего в фоновом режиме? – nbro

0

Программа автоматически печатает содержимое виджета ввода для нескольких новых окон при использовании Toplevel. Измененный код выйти из одного файла, а не два

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() 
Смежные вопросы