我无法在GUI中获得用户输入
from tkinter import *
from tkinter import ttk
import math
答案 0 :(得分:1)
我使用按钮const HeaderButton = (props) => (
<TouchableRipple
onPress={props.navigation.openDrawer}
>
,Rectangle
创建主框架,然后使用Triangle
进行显示。
我还使用pack()
创建了两个框架,但是我没有使用Entry
来显示它。
当我单击pack()
或Rectangle
时,它将运行使用Triangle
从窗口中删除主框架的功能,并且它使用pack_forget()
两次显示带有{ {1}}。
此框架具有按钮.pack()
,该按钮使用您的函数来计算结果-但是它从Entry获取值,并在Label中显示结果。
它还有一个按钮Entry
,该按钮将删除该框架并再次显示主框架。
我使用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
与第二帧相同。
Bryan Oakley创建了一个更复杂的版本,该版本使用类command=lambda:change_frame(rectanlge_frame)
,有时您可以在Stackoverflow的问题中看到这些类。