Как ввести / использовать float через поле ввода tkinter Python? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь узнать о tkinter, поэтому я создаю маленький GUI python для ввода 2 чисел и использую их поле tk.Entry() для ввода числа и нахождения суммы обоих. Но я не могу обновить число с плавающей точкой и генерировать их сумму. Может кто-нибудь помочь добавить некоторые компоненты, чтобы заставить его работать? Когда я генерирую результат, он показывает только 0, которое является начальным значением переменной.

import tkinter as tk
from tkinter import *

root = tk.Tk()
root.title("Shear and Moment Diagram Calculator")
operator=""

canvas = tk.Canvas(root, height=400,width=500,bg="White")
canvas.pack()
frame=tk.Frame(root, bg="Light Blue")
frame.place(relwidth=0.9,relheight=0.9, relx=0.05, rely=0.05)

num1 = float()
num2 = float()

tk.Label(frame, font =("Helvetica", 20),
        text="Number 1:" ).grid(row=0)

tk.Label(frame, font =("Helvetica", 20),
        text="Number 2:" ).grid(row=1,column=0)

num1= tk.Entry(frame, textvariable = num1 ).grid(row=0, column = 1)
num2= tk.Entry(frame, textvariable = num2 ).grid(row=1, column = 1)

def generate():
    num3= num1 + num2
    print(num3)


generate=tk.Button(frame, text="result", height="2", width="10",
                   fg="Black", bg="yellow", command = generate )
generate.grid(row=2, column=2)

mainloop()

Ответы [ 2 ]

1 голос
/ 21 января 2020

textvariable нужно tk.StringVar(), tk.IntVar() или tk.DoubleVar()

Используя StringVar(), вы можете преобразовать значение, используя float(), вычислить сумму и вернуть ее в другие StringVar(), назначенные для Label() или Entry(). Вы также можете отобразить текст "Error", если значения будут неправильными.

enter image description here

import tkinter as tk

# --- functions ---

def generate():
    try:
        result = float(num1.get()) + float(num2.get())
    except Exception as ex:
        print(ex)
        result = 'error'

    num3.set(result)

# --- main ---

root = tk.Tk()

num1 = tk.StringVar()
num2 = tk.StringVar()
num3 = tk.StringVar()

tk.Label(root, text="Number 1:").grid(row=0, column=0)
tk.Label(root, text="Number 2:").grid(row=1, column=0)
tk.Label(root, text="Result:").grid(row=2, column=0)

tk.Entry(root, textvariable=num1).grid(row=0, column=1)
tk.Entry(root, textvariable=num2).grid(row=1, column=1)
tk.Entry(root, textvariable=num3).grid(row=2, column=1)

button = tk.Button(root, text="Calculate", command=generate)
button.grid(row=3, column=1)

root.mainloop()
0 голосов
/ 21 января 2020

Вы можете использовать StringVar() для текстовой переменной, чтобы принять строку чисел с плавающей запятой c, а затем преобразовать их в число с плавающей запятой, используя float() внутри функции generate.

import tkinter as tk

root = tk.Tk()
root.title("Shear and Moment Diagram Calculator")
operator=""

canvas = tk.Canvas(root, height=400, width=500, bg="White")
canvas.pack()
frame=tk.Frame(root, bg="Light Blue")
frame.place(relwidth=0.9, relheight=0.9, relx=0.05, rely=0.05)

tk.Label(frame, font=("Helvetica", 20), text="Number 1:").grid(row=0)

tk.Label(frame, font=("Helvetica", 20), text="Number 2:").grid(row=1,column=0)

# define entry variables
n1 = tk.StringVar()
n2 = tk.StringVar()

# assign the StringVar to the entry widget textvariables
num1= tk.Entry(frame, textvariable=n1)
num1.grid(row=0, column=1)
num2= tk.Entry(frame, textvariable=n2)
num2.grid(row=1, column=1)

def generate():
    # get the entered value from the entry field and convert it to float and then add
    num3 = float(n1.get()) + float(n2.get())
    print(num3)

generate=tk.Button(frame, text="result", height="2", width="10", fg="Black", bg="yellow", command=generate )
generate.grid(row=2, column=2)

root.mainloop()

Здесь GUI и результат добавления плавающего числа:

GUI

Вы также можете использовать DoubleVar() для выполнения sh этой задачи.

Надеюсь, это поможет!

...