Как я могу написать простой калькулятор самым простым способом из python Tkinter GUI? Я пытался, но это не работает - PullRequest
0 голосов
/ 16 апреля 2020

вот код

import Tkinter
import Tkinter as Tk
from Tkinter import *

calc_window=Tk()
calc_window.title("Calculator")

# the function is the problem
text=StringVar()

def click(nums):
    text.set(nums)

frame=Frame(calc_window)

frame.grid()

entry=Entry(frame, textvariable="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(Button(frame, text=nums[b],command=click))
        buttonList[b].grid(row=r, column=c)
        b+=1

calc_window.mainloop()

1 Ответ

0 голосов
/ 16 апреля 2020

Есть несколько ошибок, но ничего особенного.

  • Необходим только один импорт 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

Есть еще куча работы для go, но это должен вернуть вас в нужное русло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...