2016-09-30 2 views
0

Я играю с функциями в Python и я, хотя я мог бы сделать JOptionPane из Java с помощью Tkinter ... Я запускаю Python 3.x, но у меня есть небольшая проблемаНевозможно изменить переменную с помощью функции Python

from tkinter import * 

def showMessageDialog(text): 
    text = text 
    janela = Tk() 
    janela.geometry("400x100") 
    janela["bg"] = "grey" 
    janela.title(" ") 
    lb = Label(janela, text=str(text)) 
    lb.place(x=200,y=50) 
    janela.mainloop() 


def showInputDialog(text): 
    x = " " 
    def botaoClicado(): 
      x = ed.get() 
      janela.destroy() 
      return x 

    text = str(text) 
    janela = Tk() 
    janela.geometry("400x100") 
    janela["bg"] = "grey" 
    janela.title(" ") 

    lb = Label(janela, text=str(text)) 
    lb.place(x=120,y=10) 

    bt = Button(janela, width=10, text="Ok", command=botaoClicado) 
    bt.place(x=120,y=65) 

    ed = Entry(janela) 
    ed.place(x=120,y=35) 

    janela.mainloop() 

    return x 

x=0 
x = showInputDialog("Insira seu nome!") 

Прошу прощения, что это на португальском языке, но я думаю, что вы, ребята, можете мне помочь. Моя проблема заключается в следующем:

Когда я нажимаю кнопку, запись не возвращается к другой функции. Прошу прощения, но я не знаю, как я могу объяснить лучше.

+0

Если вы хотите установить глобальную переменную x, вы можете добавить 'global x' в начало функции, которая будет изменять x. или если вы хотите, чтобы «botaoClicado» изменял переменную во внешней области «showInputDialog», вы можете добавить «нелокальное x» к ее определению. Когда кнопка нажата пользователем, возвращаемое значение обратного вызова не используется ни для чего. –

+0

Так оно и было, большое спасибо! xD –

ответ

0

Звонок на mainloop не останавливается, пока все окна tkinter не закрываются. Поэтому ваша функция зависает, когда вы вызываете . Вместо этого лучше всего вызвать mainloop в основном потоке (внизу вашего скрипта) и использовать обратные вызовы для обработки ввода. Например, как только ваше диалоговое окно сообщения получит ответ, оно может вызвать функцию для обработки ответа.

+1

Я бы не сказал, что программа зависает, она просто запускает цикл событий gui, который будет ждать нажатия кнопки, после чего он назовет 'botaoClicado', который, в свою очередь, закроет окно tk, а остальная часть программы будет Продолжать. –

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