2015-01-15 21 views
3

Хороший день. Я пытаюсь создать свой собственный поле ввода для использования в моем проекте. В основном то, что я пытаюсь сделать, это запустить мою основную форму, которая будет называть вторую. пользователь предоставит некоторые данные во второй, и когда нажмите кнопку ok/close на втором для данных, будет передано обратно на первое. аналогичный по функциональности входному ящику. вот что я создал, но будучи новым для python, я не уверен, где я иду не так, и не могу быстро выяснить, когда поставить возвращение.Python Tkinter Входная коробка

Мой класс здесь


import tkinter as tk 
class MainWindow(): 
    def __init__(self, parent): 
     top = self.top = tk.Toplevel(parent) 
     self.myLabel = tk.Label(top, text='Enter a Grouping Name') 
     self.myLabel.pack() 
     self.myEntryBox = tk.Entry(top) 
     self.myEntryBox.focus_set() 
     self.myEntryBox.pack() 
     self.mySubmitButton = tk.Button(top, text='OK', command=self.DestWin) 
     self.mySubmitButton.pack() 
    def DestWin(self): 
     self.top.destroy() 

метод назвать его здесь


abc=configurator.MainWindow(root) 

+0

У вас возникли какие-либо ошибки? – Marcin

ответ

4

Не совсем уверен, чего вы пытаетесь достичь, но если вы пытаетесь получить значения из одного окна в другое, ниже вы можете найти расширенный пример на основе вашего кода.

import tkinter as tk 

class MainWindow(): 
    def __init__(self, parent): 
     top = self.top = tk.Toplevel(parent) 
     self.myLabel = tk.Label(top, text='Enter a Grouping Name') 
     self.myLabel.pack() 
     self.myEntryBox = tk.Entry(top) 
     self.myEntryBox.focus_set() 
     self.myEntryBox.pack() 
     self.mySubmitButton = tk.Button(top, text='OK', command=self.DestWin) 
     self.mySubmitButton.pack() 
    def DestWin(self): 
     # call callback function setting value in MyFrame 
     self.callback(self.myEntryBox.get()) 
     self.top.destroy() 


    def set_callback(self, a_func): 
     self.callback = a_func 



class MyFrame(tk.Frame): 
    def __init__(self, parent, **kwargs): 
     super().__init__(parent, **kwargs) 
     self.pack() 

     self.myLabel1 = tk.Label(parent, text='Click OK to enter the group name') 
     self.myLabel1.pack() 
     self.mySubmitButton1 = tk.Button(parent, text='OK', command=self.get_group_name) 
     self.mySubmitButton1.pack() 

    def get_group_name(self): 
     mw = MainWindow(None) 

     # provide callback to MainWindow so that it can return results to MyFrame 
     mw.set_callback(self.set_label) 



    def set_label(self, astr = ''): 
     self.myLabel1['text'] = astr 





root = tk.Tk() 

mf = MyFrame(root) 

root.mainloop() 

Скриншот:

enter image description here

текст из правого окна, при нажатии кнопки ОК, будет показано в левом окне. Это достигается посредством обратных вызовов. MainWindow выполняет функцию обратного вызова, и когда вы нажимаете OK, она выполняется. Обратный вызов - set_label из MyFrame.

Надеюсь, это поможет.

+0

это делает именно то, что я просил, спасибо. Я пробовал голосовать, но мне нужно больше, чем 15 человек. , но это ответ – NewToPython

+0

@NewToPython Thx. Рад, что смог помочь. – Marcin

Смежные вопросы