Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 GUI按钮调用在GUI中提示用户输入然后显示输出的函数时出现问题_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 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,它使用您的函数计算结果-但它从输入中获取值,并在标签中

我无法在GUI中获取用户输入


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),以提高代码的可读性。