2015-05-31 1 views
0

Прежде всего обратите внимание, что я делаю все это в Enthought/Canopy.Python tkinter button lagging/printing at exit

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

Кроме того, когда вы ввели значения и один раз нажмете кнопку, снова ничего не получится, но если вы снова нажмете на кнопку, она напечатает значения, но не так, как ожидалось. Скажем, вы ввели 1, 2, 3, 4 и дважды нажмите кнопку, то, что вы видите на экране, - 1, 2, 3, 4, 1, и когда вы закроете окно, оно распечатает остальные.

Буду признателен, если вы, люди, можете мне помочь. Заранее спасибо. Ниже приведен мой код:

Обновление: Эта проблема не происходит с IDLE, но только Canopy.

from Tkinter import * 

class Application: 
    def printcmd(self): 
     print(self.entrybox.get()) 

    def __init__(self, master): 
     self.entrybox = Entry(master) 
     self.button = Button(master, text="print", command = self.printcmd) 
     self.entrybox.grid() 
     self.button.grid() 

root = Tk() 
Application(root) 
root.mainloop() 
+0

Я не говорю, что это исправит вашу проблему, поэтому его комментарий вместо ответа, но python - это сборник мусора. Создание экземпляра 'Application', не присваивая его переменной, может привести к возникновению нечетных вещей, если задействован сборщик мусора. Как я уже сказал, по всей вероятности, это не решит вашу проблему, но ее стоит сделать и по-прежнему создает хорошую форму программирования. –

+0

Я изменил приложение на приложение и попробовал c = App (root), но, к сожалению, я все равно получаю такое же странное поведение. Что делает его настолько странным, так это то, что это очень простая программа с несколькими паролями, но я попытался запустить это с помощью IDLE, и я не получаю эту проблему, когда я это делаю. – Deniz

ответ

1

Если вы делаете это в сени GUI, вы должны убедиться, что Qt еще не установлены, как GUI интерфейс. См. https://support.enthought.com/hc/en-us/articles/204469880-Using-Tkinter-Turtle-or-Pyglet-in-Canopy-s-IPython-panel

Для печати лаг: Python буферизует свой выход. Если вы хотите убедиться, что какой-то вывод печатается немедленно, следуйте инструкциям печати с sys.stdout.flush(), чтобы очистить выходные буферы печати. (Конечно, вы должны сначала import sys.)

Это может быть проблемой в любой программе Python. Он чаще возникает в Canopy, чем в IDLE, потому что Canopy использует QtConsole от IPython, который отделяет ядро ​​выполнения от передней панели терминала как два отдельных процесса ОС.

+0

Благодарим вас за ответ. Я сделал это: Edit> Preferences> Python> Снимите флажок «Использовать pylab», а затем перезапустил ядро, на самом деле перезапустил все. Еще не повезло. И да, я запускаю код в GUI Canopy. Когда я запускаю его через IDLE, я не получаю такого поведения. – Deniz

+0

Обновленный ответ, включающий в себя промывочный буфер печати, должен исправить его для вас. –

+1

Это работало Джонатан. Я отметил ваш отредактированный ответ как принятый, поэтому, если у кого-то случится такая же проблема, они могут получить помощь здесь. Большое спасибо за вашу помощь. – Deniz

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

  • Нет связанных вопросов^_^