在python中使用tkinter按钮向变量添加数字
所以,我正在尝试构建一个基于GUI的计算器,没有什么特别之处,只是使用基本的操作符(加、减、乘、除)。然而,我尝试使用按钮来输入要加/减的数字,就像一个真正的计算器一样。我使用一个变量,在python中使用tkinter按钮向变量添加数字,python,tkinter,Python,Tkinter,所以,我正在尝试构建一个基于GUI的计算器,没有什么特别之处,只是使用基本的操作符(加、减、乘、除)。然而,我尝试使用按钮来输入要加/减的数字,就像一个真正的计算器一样。我使用一个变量,num1,来存储第一个数字,num2来存储第二个数字,例如, num1+num2=结果 但是我不知道怎么说,如果按下按钮1两次,使num1包含值11 如果我想将12添加到43,我需要一种将num1设置为12的方法,方法是先按按钮1,然后按按钮2。然后按add按钮指定我的操作员,然后按button4和button3
num1
,来存储第一个数字,num2
来存储第二个数字,例如,
num1+num2=结果
但是我不知道怎么说,如果按下按钮1两次,使num1
包含值11
如果我想将12添加到43,我需要一种将num1
设置为12的方法,方法是先按按钮1,然后按按钮2。然后按add按钮指定我的操作员,然后按button4和button3将num2
设置为43
这是我的代码(注意:我还没有完成标记为button1-button0的按钮):
这在Python中是可能的吗?我不会为您完成整个程序,但下面展示了如何使用按钮向变量添加数字,以及如何更好地布局GUI 为了便于向
工作区
标签添加数字,我创建了一个StringVar
,并在创建时使用textvariable=
选项将其与标签
关联。要实际添加数字,添加了一个名为add椖digital()
的函数,并创建了一个对其进行调用的lambda
函数,并用作每个数字上的按钮
在使用tkinter时,布局复杂GUI小部件的一个好方法是创建嵌套的Frame
s,并将它们分组放在一个小部件中。这允许通过其包含的框架定位整个组。它还允许您在容器中安排内容,而无需考虑其他小部件的确切位置
from tkinter import *
operator = ''
current_problem = ''
# Function to change text in workspace
def append_to_workspace(item):
""" Add item to workspace StringVar. """
if not isinstance(item, str):
item = str(item)
ws_var.set(ws_var.get() + item)
# Functions to change text in workspace
def add():
global current_problem
current_problem = current_problem + '+'
workspace.config(text = current_problem)
operator = 'A'
def subtract():
global current_problem
current_problem = current_problem + '-'
workspace.config(text = current_problem)
operator = 'S'
def divide():
global current_problem
current_problem + current_problem + '÷'
workspace.config(text = current_problem)
operator = 'D'
def multiply():
global current_problem
current_problem = current_problem + '×'
workspace.config(text = current_problem)
operator = 'M'
def num1():
global current_problem
current_problem = current_problem + '1'
workspace.config(text = current_problem)
# Create the main Tkinter Window
window = Tk()
window.title('Calculator')
# Add an empty Label for the workspace, place it in grid
ws_var = StringVar(value='')
workspace = Label(window, width=25, height=1, textvariable=ws_var)
workspace.grid(row=0, column=0)
# Operator keypad
operators = Frame(window)
add_button = Button(operators, text='+', width=2, command=add)
add_button.grid(row=1, column=0)
subtract_button = Button(operators, text='-', width=2, command=subtract)
subtract_button.grid(row=1, column=1)
divide_button = Button(operators, text='÷', width=2, command=divide)
divide_button.grid(row=1, column=2)
multiply_button = Button(operators, text='×', width=2, command=multiply)
multiply_button.grid(row=1, column=3)
operators.grid(row=1)
# Numeric keypad
numbers = Frame(window)
button7 = Button(numbers, text='7', width=2, command=lambda: append_to_workspace(7))
button7.grid(row=0, column=0)
button8 = Button(numbers, text='8', width=2, command=lambda: append_to_workspace(8))
button8.grid(row=0, column=1)
button9 = Button(numbers, text='9', width=2, command=lambda: append_to_workspace(9))
button9.grid(row=0, column=2)
button4 = Button(numbers, text='4', width=2, command=lambda: append_to_workspace(4))
button4.grid(row=1, column=0)
button5 = Button(numbers, text='5', width=2, command=lambda: append_to_workspace(5))
button5.grid(row=1, column=1)
button6 = Button(numbers, text='6', width=2, command=lambda: append_to_workspace(6))
button6.grid(row=1, column=2)
button1 = Button(numbers, text='1', width=2, command=lambda: append_to_workspace(1))
button1.grid(row=2, column=0)
button2 = Button(numbers, text='2', width=2, command=lambda: append_to_workspace(2))
button2.grid(row=2, column=1)
button3 = Button(numbers, text='3', width=2, command=lambda: append_to_workspace(3))
button3.grid(row=2, column=2)
button0 = Button(numbers, text='0', width=2, command=lambda: append_to_workspace(0))
button0.grid(row=3, column=0, columnspan=3)
numbers.grid(row=2)
window.mainloop()
以下是在我的系统上运行的情况:
你的问题是什么或你已经有什么还不清楚。请考虑创建一个.@ ChristianDean,我增加了一个例子,我理解你的例子“丹贝尔德”,但是你能补充一个问题吗?您已经有了什么代码?您提供的示例不是最小的(复制问题所需的最小代码量)、完整的(我看不到上面的任何数字按钮)或可验证的(其中似乎没有任何错误)。您能为我们提供一个示例,让我们真正看到您遇到的问题吗?
from tkinter import *
operator = ''
current_problem = ''
# Function to change text in workspace
def append_to_workspace(item):
""" Add item to workspace StringVar. """
if not isinstance(item, str):
item = str(item)
ws_var.set(ws_var.get() + item)
# Functions to change text in workspace
def add():
global current_problem
current_problem = current_problem + '+'
workspace.config(text = current_problem)
operator = 'A'
def subtract():
global current_problem
current_problem = current_problem + '-'
workspace.config(text = current_problem)
operator = 'S'
def divide():
global current_problem
current_problem + current_problem + '÷'
workspace.config(text = current_problem)
operator = 'D'
def multiply():
global current_problem
current_problem = current_problem + '×'
workspace.config(text = current_problem)
operator = 'M'
def num1():
global current_problem
current_problem = current_problem + '1'
workspace.config(text = current_problem)
# Create the main Tkinter Window
window = Tk()
window.title('Calculator')
# Add an empty Label for the workspace, place it in grid
ws_var = StringVar(value='')
workspace = Label(window, width=25, height=1, textvariable=ws_var)
workspace.grid(row=0, column=0)
# Operator keypad
operators = Frame(window)
add_button = Button(operators, text='+', width=2, command=add)
add_button.grid(row=1, column=0)
subtract_button = Button(operators, text='-', width=2, command=subtract)
subtract_button.grid(row=1, column=1)
divide_button = Button(operators, text='÷', width=2, command=divide)
divide_button.grid(row=1, column=2)
multiply_button = Button(operators, text='×', width=2, command=multiply)
multiply_button.grid(row=1, column=3)
operators.grid(row=1)
# Numeric keypad
numbers = Frame(window)
button7 = Button(numbers, text='7', width=2, command=lambda: append_to_workspace(7))
button7.grid(row=0, column=0)
button8 = Button(numbers, text='8', width=2, command=lambda: append_to_workspace(8))
button8.grid(row=0, column=1)
button9 = Button(numbers, text='9', width=2, command=lambda: append_to_workspace(9))
button9.grid(row=0, column=2)
button4 = Button(numbers, text='4', width=2, command=lambda: append_to_workspace(4))
button4.grid(row=1, column=0)
button5 = Button(numbers, text='5', width=2, command=lambda: append_to_workspace(5))
button5.grid(row=1, column=1)
button6 = Button(numbers, text='6', width=2, command=lambda: append_to_workspace(6))
button6.grid(row=1, column=2)
button1 = Button(numbers, text='1', width=2, command=lambda: append_to_workspace(1))
button1.grid(row=2, column=0)
button2 = Button(numbers, text='2', width=2, command=lambda: append_to_workspace(2))
button2.grid(row=2, column=1)
button3 = Button(numbers, text='3', width=2, command=lambda: append_to_workspace(3))
button3.grid(row=2, column=2)
button0 = Button(numbers, text='0', width=2, command=lambda: append_to_workspace(0))
button0.grid(row=3, column=0, columnspan=3)
numbers.grid(row=2)
window.mainloop()