#python #tkinter #tkinter-entry
Вопрос:
Эй, я довольно новичок в python и учусь в старших классах. Для задания, над которым я работаю, мы должны создать графический интерфейс tkinter, который включает виджеты, ярлык, кнопки, поле ввода, кнопки радио или проверки, рамки и окно отображения. Я создаю конвертер километров в мили, который может сделать обратное, если он выбран, будут переключатели, которые пользователь может выбрать, какой из них он хотел бы рассчитать, но у меня много проблем с вычислением, потому что я не могу получить номер поля ввода кратным или разделить на 1,609 или любое другое число. Вот код, который у меня сейчас есть, я приношу извинения за беспорядок и за то, насколько это, вероятно, плохо
import tkinter as tk import tkinter.messagebox # Customize main window root = tk.Tk() root.title('GUI Assignment') # Create the frames, right, left, and bottom, and pack them bframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50) bframe.pack(side='bottom') rframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50) rframe.pack(side='right') lframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50) lframe.pack(side='left') # Make the label and the entry box for the right frame dlabel = tk.Label(rframe, text = 'Enter the distance', ) dentry = tk.Entry(rframe, width=75) # Pack the label and entry dlabel.pack(side='left') dentry.pack(side="right") dist = 3.0 temp =(dentry.get()) # Create the convert command def convert(): if radio_var.get()==1: tkinter.messagebox.showinfo('Distance',temp / dist ) # Make the convert and quit buttons b = tk.Button(bframe, text="Convert", command=convert) quit = tk.Button(bframe, text='Quit', command=root.destroy) # Pack the buttons b.pack(side='left') quit.pack(side='right') # Make the radio variable radio_var = tk.IntVar() radio_var.set(1) # Make the radio buttons for the left frame rb = tk.Radiobutton(lframe, text='Km to Miles', variable=radio_var, value=1) rb2 = tk.Radiobutton(lframe, text='Miles to Km', variable=radio_var, value=2) # Pack The Radio Buttons rb.pack() rb2.pack() root.mainloop()
Ответ №1:
Проблема , с которой вы столкнулись здесь, заключается в том , что вы пытаетесь разделить temp
строку на dist
поплавок. Вам нужно преобразовать temp
в поплавок, прежде чем конвертировать его с помощью float(temp)
. Кроме того, поскольку вы установили temp
один раз во время выполнения сценария, он будет ссылаться только на значение, которое было в поле ввода, как только переменная была назначена. Чтобы исправить это, вы должны вызывать dentry.get()
внутри своей convert()
функции, а не за ее пределами.