2015-06-13 2 views
1

Я смущен о том, где положить функцию mainloop в python. Когда я использую этот код:mainloop() function in python

from tkinter import * 
import sys 
window = Tk() 
def mainFunct(): 
    while True: 

     label = Label(window,text="Hello World") 
     label2 = Label(window, text = "Hello World2") 
     menu = input("Please input something") 
     if menu == "a": 
      label.pack() 
     if menu == "b": 
      label2.pack() 
     if menu == "c": 
      sys.exit() 

     window.mainloop() 
mainFunct() 

Я хочу этикетки для упаковки, когда пользователь вводит и когда пользователь вводит б я хочу label2 быть упакованы. Я не уверен, когда и зачем использовать mainloop. Прямо сейчас, когда я запускаю программу, GUI появляется только после того, как я что-то ввел, а затем я не могу даже ввести что-либо еще, и я думаю, что это имеет какое-то отношение к функции window.mainloop(), потому что оно просто зацикливается и снова, вместо того, чтобы снова запустить True цикл True.

ответ

1

Я был в состоянии понять ваш вопрос лучше, основываясь на комментарии. Дайте мне знать, если это то, что вы ищете:

import tkinter as tk 

class HelloWorld(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.entry = tk.Entry(self) 
     self.button = tk.Button(self, text="What's your input?", command=self.on_button) 
     self.button.pack() 
     self.entry.pack() 

    def on_button(self): 
     answer = self.entry.get() 
     if answer == "a": 
      print("Hello World") 
     elif answer == "b": 
      print("Hello World 2") 
     elif answer == "c": 
      root.destroy() 

root = HelloWorld() 
root.mainloop() 

Так что, когда дело с входом пользователя, лучше создать класс и от получения/сравнить информацию.

Теперь, если ответ - это ничего, кроме a, b, или c, от программы не будет ответа, поэтому соответствующим образом отрегулируйте.

+0

Спасибо за ответ !, У меня есть либо способ, которым я кладу mainloop(), он будет просто контур бесконечно ... так что, если у меня есть это перед mainFunct, тогда он просто покажет экран, и если у меня есть его другой mainFunct(), тогда метки будут упаковываться только после ввода типа «c». Например. 'code' mainFunct() root.mainloop() 'code' Интерфейс GUI появится только после mainFunction, но как я могу упаковать вещи, когда хочу, чтобы mainFunction зациклился? – mre12345

+0

Спасибо, это именно то, что я искал !!. – mre12345

+0

Отлично, рад, что все получилось. – Leb