Добавление цифр в переменную с помощью кнопок tkinter в python - PullRequest
0 голосов
/ 14 марта 2019

Итак, я пытаюсь построить калькулятор на основе графического интерфейса, ничего особенного, только с базовыми операторами (сложение, вычитание, умножение и деление).Однако я пытаюсь использовать кнопки для ввода чисел, которые нужно сложить / вычесть, как настоящий калькулятор.Я использую переменную num1 для хранения первого числа и num2 для хранения второго числа, например, num1 + num2 = result

Однако я не знаю, как сказать, есликнопка 1 нажимается дважды, чтобы num1 содержало значение 11?

Если я хочу добавить от 12 до 43, мне нужен способ установки num1 в 12, нажав кнопку 1, а затем кнопку 2.Затем укажите моего оператора, нажав кнопку добавления, затем нажмите кнопку 4 и кнопку 3, чтобы установить num2 на 43.

Вот мой код (Примечание: я еще не закончил кнопки, помеченные как button1 - button0):

from tkinter import *

operator = ''
current_problem = ''

# 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
workspace = Label(window, width = 25, height = 1, text = '')
workspace.grid(row = 0, column = 0)

add_button = Button(window, text = '+', width = 2, command = add)
add_button.grid(row = 1, column = 0)
subtract_button = Button(window, text = '-', width = 2, command = subtract)
subtract_button.grid(row = 1, column = 1)
divide_button = Button(window, text = '÷', width = 2, command = divide)
divide_button.grid(row = 1, column = 2)
multiply_button = Button(window, text = '×', width = 2, command = multiply)
multiply_button.grid(row = 1, column = 3)

button1 = Button(window, text = '×', width = 2, command = multiply)
button1.grid(row = 1, column = 3)
button2 = Button(window, text = '×', width = 2, command = multiply)
button2.grid(row = 1, column = 3)
button3 = Button(window, text = '×', width = 2, command = multiply)
button3.grid(row = 1, column = 3)
button4 = Button(window, text = '×', width = 2, command = multiply)
button4.grid(row = 1, column = 3)
button5 = Button(window, text = '×', width = 2, command = multiply)
button5.grid(row = 1, column = 3)
button6 = Button(window, text = '×', width = 2, command = multiply)
button6.grid(row = 1, column = 3)
button7 = Button(window, text = '×', width = 2, command = multiply)
button7.grid(row = 1, column = 3)
button8 = Button(window, text = '×', width = 2, command = multiply)
button8.grid(row = 1, column = 3)
button9 = Button(window, text = '×', width = 2, command = multiply)
button9.grid(row = 1, column = 3)
button0 = Button(window, text = '×', width = 2, command = multiply)
button0.grid(row = 1, column = 3)

Возможно ли это в Python?

1 Ответ

0 голосов
/ 14 марта 2019

Я не собираюсь заканчивать всю вашу программу для вас, но ниже показано, как добавлять цифры к переменной с помощью кнопок, а также в целом лучший способ создания макета вашего графического интерфейса.

Чтобы упростить добавление цифр к метке workspace, я создал StringVar и связал его с Label, используя опцию textvariable= при его создании. Чтобы фактически добавить цифры, была добавлена ​​функция с именем add_digit(), и была создана функция lambda, которая вызывает ее, и использовалась в качестве функции обратного вызова command= для каждой цифры Button.

Хороший способ компоновки сложных графических виджетов при использовании tkinter - это создание вложенных Frame и объединение их групп в один. Это позволяет позиционировать всю группу через их содержащие Frame. Это также позволяет вам размещать вещи в контейнере, не беспокоясь о размещении именно других виджетов.

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()

Вот как это работает в моей системе:

screenshot of application running

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