Python GUI按钮调用在GUI中提示用户输入然后显示输出的函数时出现问题
我无法在GUI中获取用户输入Python GUI按钮调用在GUI中提示用户输入然后显示输出的函数时出现问题,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我无法在GUI中获取用户输入 from tkinter import * from tkinter import ttk import math 我使用按钮矩形,三角形创建主框架,并使用pack()来显示它 我还使用条目创建了两个框架,但我没有使用pack()来显示它 当我单击矩形或三角形时,它运行函数,该函数使用pack\u-forget()从窗口中删除主框架,并使用.pack()两个显示带有条目的框架之一 此框架具有按钮Calc,它使用您的函数计算结果-但它从输入中获取值,并在标签中
from tkinter import *
from tkinter import ttk
import math
我使用按钮
矩形
,三角形
创建主框架,并使用pack()
来显示它
我还使用条目创建了两个框架
,但我没有使用pack()
来显示它
当我单击矩形
或三角形
时,它运行函数,该函数使用pack\u-forget()
从窗口中删除主框架,并使用.pack()
两个显示带有条目的框架之一
此框架具有按钮Calc
,它使用您的函数计算结果-但它从输入中获取值,并在标签中显示结果
它还具有按钮Back
,可删除此帧,并再次显示主帧
我使用current
记住当前可见帧
from tkinter import *
from tkinter import ttk
import math
# ---
def change_frame(new_frame):
global current
# hide current frame
current.pack_forget()
# show new frame
current = new_frame
current.pack()
def show_main_frame():
change_frame(main_frame)
def show_rectangle_frame():
change_frame(rectangle_frame)
def show_triangle_frame():
change_frame(triangle_frame)
# ---
def calc_rectangle():
try:
l = float(rectangle_entry1.get())
w = float(rectangle_entry2.get())
arear=(l * w)
print(arear)
rectangle_result['text'] = str(arear)
except ValueError:
pass
def calc_triangle():
try:
b = float(triangle_entry1.get())
h = float(triangle_entry2.get())
areat=(0.5* b * h )
print(areat)
triangle_result['text'] = str(areat)
except ValueError:
pass
#-----
window = Tk()
window.title("Area Calculator")
#window.geometry("290x120")
main_frame = Frame(window)
main_frame.pack()
button = Button(main_frame, text="Rectangle", command=show_rectangle_frame)
button.pack()
button = Button(main_frame, text="Triangle", command=show_triangle_frame)
button.pack()
current = main_frame
# --- frame without .pack() ---
rectangle_frame = Frame(window)
rectangle_result = Label(rectangle_frame, text="")
rectangle_result.pack()
l = Label(rectangle_frame, text="Enter Length:")
l.pack()
rectangle_entry1 = Entry(rectangle_frame)
rectangle_entry1.pack()
l = Label(rectangle_frame, text="Enter Width:")
l.pack()
rectangle_entry2 = Entry(rectangle_frame)
rectangle_entry2.pack()
b = Button(rectangle_frame, text="Calc", command=calc_rectangle)
b.pack()
b = Button(rectangle_frame, text="BACK", command=show_main_frame)
b.pack()
# --- frame without .pack() ---
triangle_frame = Frame(window)
triangle_result = Label(triangle_frame, text="")
triangle_result.pack()
l = Label(triangle_frame, text="Enter base:")
l.pack()
triangle_entry1 = Entry(triangle_frame)
triangle_entry1.pack()
l = Label(triangle_frame, text="Enter Height:")
l.pack()
triangle_entry2 = Entry(triangle_frame)
triangle_entry2.pack()
b = Button(triangle_frame, text="Calc", command=calc_triangle)
b.pack()
b = Button(triangle_frame, text="BACK", command=show_main_frame)
b.pack()
# ---
window.mainloop()
使用lambda
可以
command=lambda:change_frame(rectanlge_frame)
这样就不需要函数show_rectangle\u frame
与第二帧相同
Bryan Oakley创建了一个更复杂的版本,它使用类Page(Frame)
,有时您可以在Stackoverflow的问题中看到这些类。如果有人能给我指出正确的方向,我将非常感谢您需要使用输入字段而不是输入()如果您希望用户在GUI中输入,或者如果您希望在同一窗口中有三个按钮,请不要在window=Tk()
之前创建多个框架对象并使用所有函数(def),以提高代码的可读性。