Имя: Пароль:
IT
 
Python. Не устанавливается текст в Entry
0 megabax
 
22.01.17
12:49
Добрый день. Подскажите пожалуйста, почему установленный в Entry текст не отображается? Написал на Python вот такую прогу, жму в ней кнопку, но в поел вводе текст почему то не отображается, подскажите плз, что я не так делаю:
from tkinter import *

class Calculator(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.setUI()
    def button_clicked():
        self.output.delete("0.0","end")
        self.output.insert("0.0","sdfdsfsd")        
    def setUI(self):        
        self.pack(fill=BOTH, expand=1)
        self.output=Entry(self, width=25)
        self.output.grid(row=0, column=0, columnspan = 5)
        i=0
        currow=1
        while i<=9:
            if i>=5:
                currow=2                
            btn = Button(self, text=i, width=3)
            btn.grid(row=currow, column=i % 5)
            btn.bind("Button",self.button_clicked)
            i=i+1
            
def main():
    root = Tk()
    root.geometry("1500x900")
    #root.textvar=root.StringVar()
    app = Calculator(root)
    root.mainloop()

if __name__ == "__main__":
    main()
3 Asmody
 
22.01.17
14:43
(0) Потому что "insert ( index, s )   Inserts string s before the character at the given index.
4 Asmody
 
22.01.17
14:44
5 lock19
 
22.01.17
16:28
В тексте сразу несколько ошибок.
Вот так будет работать, но насколько соответственно задуманному я не знаю

from tkinter import *

class Calculator(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.setUI()
    def button_clicked(self, event):
        self.output.delete("0.0","end")
        self.output.insert("0.0","sdfdsfsd")        
    def setUI(self):        
        self.pack(fill=BOTH, expand=1)
        self.output=Text(self, height=1, width=25)
        self.output.grid(row=0, column=0, columnspan = 5)
        i=0
        currow=1
        while i<=9:
            if i>=5:
                currow=2                
            btn = Button(self, text=i, width=3)
            btn.grid(row=currow, column=i % 5)
            btn.bind("<Button-1>",self.button_clicked)
            i=i+1
            
def main():
    root = Tk()
    root.geometry("1500x900")
    #root.textvar=root.StringVar()
    app = Calculator(root)
    root.mainloop()

if __name__ == "__main__":
    main()
6 megabax
 
22.01.17
18:21
(5) тоже самое, никакой текст не появляется при нажатии на кнопку
7 megabax
 
22.01.17
18:25
Может там как-то обновить надо или что?
8 lock19
 
22.01.17
19:00
(6) Не верю. Точно мой текст запускался, а не старый?
Что за система? Питон?
Если заменить обработчик на

def button_clicked(self, event):
    print(event.widget)

в консоль что-нибудь выводится?
9 megabax
 
22.01.17
19:55
(8) Кстати, в консоли вообще ничего не выводиться, если я использую print. Система IDLE (Python 3.5 32-bit)
10 megabax
 
22.01.17
19:58
похоже, не срабатывает обработчик, когда я делаю print вне класса, например, так:
if __name__ == "__main__":
    print("start")
    main()
он работает
11 lock19
 
22.01.17
20:14
Всё должно работать.
btn.bind("<Button-1>",self.button_clicked)
Прописано именно так?

Оперативно по питону подсказать могут на http://python.su/forum/
12 megabax
 
22.01.17
20:22
Решил вот так сделать попробовать:
        btn = Button(self, text="Кнопка", width=10, command=self.button_clicked)
        btn.grid(row=1, column=0)
Теперь при нажатии кнопочки говорит:
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\pc1\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
TypeError: button_clicked() missing 1 required positional argument: 'event'
13 megabax
 
22.01.17
20:24
(11) Да, и за ссылку спасибо, кажется, хороший форум.
14 Harniti
 
23.01.17
04:38