#python #tkinter
Вопрос:
Как работает вставка текста в запись tkinter? Например, что такое индекс? Я делал codemy.com задача tkinter, для которой я создаю калькулятор; Я не понимаю, как вставить номер.
Вот мой код:
### Calculator from tkinter import * root = Tk() root.title = ("Calculator") display = Entry(root) display.grid(row = 0, column = 0, columnspan = 5, padx = 10, pady = 10) no = "" def numClicked(NO): global no no = str(NO) str(no) display.insert(no, NO) print (no) No1 = Button(root, text = 1, padx = 40, pady = 20, command = lambda: numClicked(1)) No1.grid(row = 1, column = 0) No2 = Button(root, text = 2, padx = 40, pady = 20, command = lambda: numClicked(2)) No2.grid(row = 1, column = 1) No3 = Button(root, text = 3, padx = 40, pady = 20, command = lambda: numClicked(3)) No3.grid(row = 1, column = 2) No4 = Button(root, text = 4, padx = 40, pady = 20, command = lambda: numClicked(4)) No4.grid(row = 2, column = 0) No5 = Button(root, text = 5, padx = 40, pady = 20, command = lambda: numClicked(5)) No5.grid(row = 2, column = 1) No6 = Button(root, text = 6, padx = 40, pady = 20, command = lambda: numClicked(6)) No6.grid(row = 2, column = 2) No7 = Button(root, text = 7, padx = 40, pady = 20, command = lambda: numClicked(7)) No7.grid(row = 3, column = 0) No8 = Button(root, text = 8, padx = 40, pady = 20, command = lambda: numClicked(8)) No8.grid(row = 3, column = 1) No9 = Button(root, text = 9, padx = 40, pady = 20, command = lambda: numClicked(9)) No9.grid(row = 3, column = 2) No0 = Button(root, text = 0, padx = 40, pady = 20, command = lambda: numClicked(0)) No0.grid(row = 4, column = 1) OperatorM = Button(root, text ="*", padx = 40, pady = 20) OperatorM.grid(row = 4, column = 0) OperatorD = Button(root, text ="/", padx = 40, pady = 20) OperatorD.grid(row = 4, column = 2) OperatorA = Button(root, text =" ", padx = 40, pady = 20) OperatorA.grid(row = 5, column = 0) OperatorS = Button(root, text ="-", padx = 40, pady = 20) OperatorS.grid(row = 5, column = 2) OperatorP = Button(root, text ="^", padx = 40, pady = 20) OperatorP.grid(row = 5, column = 1) OperatorE = Button(root, text =" = ", padx = 40, pady = 20) OperatorE.grid(row = 1, column = 3) OperatorC = Button(root, text ="Clear", padx = 40, pady = 20) OperatorC.grid(row = 2, column = 3) root.mainloop()
Здесь я нажимаю цифры, и они расположены в правильном порядке. Но когда я print(no)
, это отображается в обратном порядке ( No
это число, такое как 1, 2, 3, 4 и т. Д.).
Так как же изменить порядок?
Комментарии:
1. распечатайте
str(no) str(NO)
вместоstr(NO) str(no)
, и у вас все будет в правильном порядке.2. я не знаю, что вы пытаетесь сделать,
insert(no, NO)
но это работаетinsert(position, value)
иEntry
отображается правильно только потому, что вы используете значение4321
какposition
—insert("4321", "4")
— и позиция"4321"
находится в конце текущего значения вEntry
— но вы должны использовать специальный тег"end"
, напримерinsert("end", NO)
3. вы должны добавить новый номер в конце
no = no str(NO)
или корочеno = str(NO)
. ИЛИ вы должны сохранить его как целое число или с плавающей точкой:no = 0
в начале и позжеno = no*10 NO
Ответ №1:
Я думаю, что самый простой способ сделать это-изменить свою numClicked
функцию так, чтобы она вставляла num
в конце вашего display
виджета, передавая "end"
в качестве первого аргумента insert
методу:
def numClicked(num): display.insert("end", num) print(display.get())
Вам не нужно хранить глобальную переменную для display
виджета, просто используйте display.get()
ее для получения текущего значения поля ввода.