选择其他单选按钮时刷新小部件

时间:2017-09-14 15:13:49

标签: python tkinter

我正在尝试创建一个小应用程序,您可以在其中插入横截面的尺寸,然后计算属性作为面积,惯性矩等。

问题是我想刷新'部分的尺寸'每次我选择另一个radiobutton,但现在它只是覆盖。我知道我的代码看起来非常业余,但我想让它看起来更专业。

#Import modules
from tkinter import *

# Create application box
root = Tk()
root.geometry("400x600+0+0")
root.title("Predefined cross-sections beams")

# Define variables
height = StringVar()
width = StringVar()
diameter = StringVar()
thickness = StringVar()
flangethickness = StringVar()
webthickness = StringVar()
standinglegthickness = StringVar()
lyinglegthickness = StringVar()
area = StringVar()
i2 = StringVar()
i3 = StringVar()


## Solid rectangular section
# Dimensions and properties
def rectangle(*args):

    H = float(height.get())
    B = float(width.get())

    #while H <= 0 or B <= 0 :

    area.set(H * B)
    i2.set(B**3 * H / 12)
    i3.set(B * H ** 3 / 12)

# Layout
def rect():
    Label(root, text="Section height").grid(column=0,row=12)
    Label(root, text="Section width").grid(column=0,row=13)
    Label(root, text="").grid(column=0,row=14)
    Button(root, text="Calculate",command=rectangle).grid(column=0,row=15)
    Label(root, text="").grid(column=0,row=16)
    Label(root, text="Area: ").grid(column=0, row=17, sticky=W)
    Label(root, text="I2: ").grid(column=0, row=18, sticky=W)
    Label(root, text="I3: ").grid(column=0, row=19, sticky=W)

    Entry(root, textvariable=height).grid(column=1,row=12)
    Entry(root, textvariable=width).grid(column=1,row=13)

    Label(root, text="m").grid(column=3,row=12)
    Label(root, text="m").grid(column=3,row=13)

    Label(root, textvariable=area).grid(column=1,row=17)
    Label(root, textvariable=i2).grid(column=1, row=18)
    Label(root, textvariable=i3).grid(column=1, row=19)

## Solid circular section
# Dimensions and properties
def circle(*args):
    D = float(diameter.get())

    #while H <= 0 or B <= 0 :

    area.set(pi * D**2 / 4)
    i2.set(pi * D**4 / 64)
    i3.set(pi * D**4 / 64)

# Layout
def circ():
    Label(root, text="Section diameter").grid(column=0,row=12)
    Label(root, text="").grid(column=0,row=14)
    Button(root, text="Calculate",command=circle).grid(column=0,row=15)
    Label(root, text="").grid(column=0,row=16)
    Label(root, text="Area: ").grid(column=0, row=17, sticky=W)
    Label(root, text="I2: ").grid(column=0, row=18, sticky=W)
    Label(root, text="I3: ").grid(column=0, row=19, sticky=W)

    Entry(root, textvariable=diameter).grid(column=1,row=12)

    Label(root, text="m").grid(column=3,row=12)

    Label(root, textvariable=area).grid(column=1,row=17)
    Label(root, textvariable=i2).grid(column=1, row=18)
    Label(root, textvariable=i3).grid(column=1, row=19)

# Create radiobuttons
var = IntVar()
Radiobutton(root, text="Rectangle", variable=var, value=1, command=rect).grid(column=0, row=2, sticky=W)
Radiobutton(root, text="Circle", variable=var, value=2, command=circ).grid(column=0, row=3, sticky=W)

root.mainloop()

0 个答案:

没有答案