Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用tkinter按钮向变量添加数字_Python_Tkinter - Fatal编程技术网

在python中使用tkinter按钮向变量添加数字

在python中使用tkinter按钮向变量添加数字,python,tkinter,Python,Tkinter,所以,我正在尝试构建一个基于GUI的计算器,没有什么特别之处,只是使用基本的操作符(加、减、乘、除)。然而,我尝试使用按钮来输入要加/减的数字,就像一个真正的计算器一样。我使用一个变量,num1,来存储第一个数字,num2来存储第二个数字,例如, num1+num2=结果 但是我不知道怎么说,如果按下按钮1两次,使num1包含值11 如果我想将12添加到43,我需要一种将num1设置为12的方法,方法是先按按钮1,然后按按钮2。然后按add按钮指定我的操作员,然后按button4和button3

所以,我正在尝试构建一个基于GUI的计算器,没有什么特别之处,只是使用基本的操作符(加、减、乘、除)。然而,我尝试使用按钮来输入要加/减的数字,就像一个真正的计算器一样。我使用一个变量,
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()