Есть несколько ошибок, но ничего особенного.
- Необходим только один импорт
Tkinter
, импорт как tk
является обычной практикой. - В
click
функция, вы, вероятно, захотите добавить строковое значение к тому, что в настоящее время находится в StringVar
. - Для
Entry
желательна переменная StringVar
text
, а не string "text". - Основная проблема, при хранении переменных в l oop, команде потребуется
lambda
, который хранит текущее значение в переменной во время этой итерации l oop .
Пример:
import Tkinter as tk # only one Tkinter import is needed.
calc_window=tk.Tk()
calc_window.title("Calculator")
# the function is the problem
text=tk.StringVar()
def click(nums):
#text.set(nums)
text.set(text.get() + nums) # Need to get what is currently in the variable, then add to it.
frame=tk.Frame(calc_window)
frame.grid()
entry=tk.Entry(frame, textvariable=text) # the variable text, not the string "text".
entry.grid(column=0,row=0)
#creating buttons
nums="C+-/789*4561230="
b=0
buttonList=[]
for r in range(2,6):
for c in range(2,6):
buttonList.append(tk.Button(frame,
text=nums[b],
# A lambda is needed here to store the current iteration value.
command=lambda n = nums[b]: click(n)))
buttonList[b].grid(row=r, column=c)
b+=1
calc_window.mainloop()
![Example](https://i.stack.imgur.com/rUTzr.png)
Есть еще куча работы для go, но это должен вернуть вас в нужное русло.