Почему запись tkinter вставляется в обратном порядке?

#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() ее для получения текущего значения поля ввода.