添加" if" "然后" checkbutton

时间:2017-11-30 17:11:10

标签: python checkbox tkinter calculator

我是编码的新手,我为计算器编写了一些代码,用于解决工作中的一些问题。

我现在不想尝试为"脚"添加检查按钮。 &安培; "米&#34 ;.我希望它们集成到我的等式中,这样我就不必事先手动转换它们。一旦我弄清楚如何让它们在两者之间切换,我将为脚添加第二个等式。

到目前为止,这是我的代码:

import Tkinter
import math
from Tkinter import *


Lreq = 105
Dref = 1

class compintapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()
        self["bg"] = "grey"


        ## Title & subtitle labels ---------------------------------------
        titlelbl = Tkinter.Label(self, text="Wattage Calculator",
                              anchor="center",fg="black",bg="darkorange2")
        titlelbl.grid(column=0,row=0,columnspan=4,sticky='EW')




        ## Input Labels --------------------------------------------------

        sensitivitylbl = Tkinter.Label(self, text="Loudspeaker sensitivity?",
                              anchor="w",fg="white",bg="SlateGray4")
        sensitivitylbl.grid(column=0,row=2,columnspan=3,sticky='EW')

        distancelbl = Tkinter.Label(self, text="Distance from speaker to listening position?",
                              anchor="w",fg="white",bg="SlateGray4")
        distancelbl.grid(column=0,row=3,columnspan=3,sticky='EW')

        headroomlbl = Tkinter.Label(self, text="How much headroom for amplifier?",
                              anchor="w",fg="white",bg="SlateGray4")
        headroomlbl.grid(column=0,row=4,columnspan=3,sticky='EW')


        wattagelbl = Tkinter.Label(self, text="Total Wattage :",
                              anchor="w",fg="white",bg="SlateGray4")
        wattagelbl.grid(column=0,row=7,columnspan=3,sticky='EW')



        ## end of input labels ------------------------------------------------

        ## Input Boxes --------------------------------------------------------
        #self.sensitivity = Tkinter.DoubleVar()
        #speakersensitivity = Tkinter.Entry(self,textvariable=self.sensitivity)
        #speakersensitivity.grid(column=1,row=2,sticky='EW')

        self.sensitivity = Tkinter.DoubleVar()
        speakersensitivity = Tkinter.Entry(self,textvariable=self.sensitivity)
        speakersensitivity.grid(column=3,row=2,sticky='EW')

        self.distance = Tkinter.DoubleVar()
        spkdistance = Tkinter.Entry(self,textvariable=self.distance)
        spkdistance.grid(column=3,row=3,sticky='EW')

        self.headroom = Tkinter.IntVar()
        spkheadroom = Tkinter.Entry(self,textvariable=self.headroom)
        spkheadroom.grid(column=3,row=4, sticky='EW')


        ## end of input boxes -------------------------------------------------

        ## Button
        button = Tkinter.Button(self,text="C A L C U L A T E",
                                anchor="w",fg="black",bg="green",
                                command=self.OnButtonClick)
        button.grid(column=0,row=6,columnspan=1)




        var = BooleanVar()

        c=Checkbutton(self, text="Meters", variable=BooleanVar(),
                      anchor="center",fg="white",bg="grey25")
        c.grid(column=2,row=6,columnspan=1)

        c=Checkbutton(self, text="Feet", variable=BooleanVar(),
                      anchor="center",fg="white",bg="grey25")
        c.grid(column=3,row=6,columnspan=1)




        # initialize global variables
        self.ckbuttonstatus = BooleanVar()



        ## end of button

        ## Output labels
        self.amt = Tkinter.StringVar()
        amtout = Tkinter.Label(self,textvariable=self.amt,
                              anchor="e",fg="red",bg="gold")
        amtout.grid(column=3,row=7,columnspan=1,sticky='EW')

        ## end of output labels -----------------------------------------------

        self.grid_columnconfigure(0,weight=2)
        self.resizable(0,0)


    def OnButtonClick(self):
        Lsens = self.sensitivity.get()
        D2 = self.distance.get()
        HR = self.headroom.get()


        exponent = (Lreq-Lsens+20 * math.log10(D2/1)+HR)/10
        amount = 10 ** exponent
        self.amt.set(amount)

if __name__ == "__main__":
    app = compintapp_tk(None)
    app.title('Wattage Calculator')
    app.mainloop()

我希望你们都能提供帮助,因为我很难找到任何关于此的事情。

1 个答案:

答案 0 :(得分:1)

您可以使用Radiobutton仅选择一个选项metersfeet

您使用一个IntVar与两个Radiobutton具有不同的value

self.option = tk.IntVar(value=1)

c = tk.Radiobutton(self, text="Meters", value=1, variable=self.option)

c = tk.Radiobutton(self, text="Feet", value=2, variable=self.option)

OnButtonClick中,您可以使用

获取所选元素(值1或\ n2}
selected = self.option.get()

if selected == 1:
    print('meters')
else:
    print('feet')

顺便说一句:您应该使用try/except,因为有时log()的参数错误并给出错误。

BTW:我们对CamelCaseNamesLabel等类使用Entry。对于其他元素,我们使用lower_case_names - 例如on_button_click

完整代码:

import Tkinter as tk
import math

Lreq = 105
Dref = 1

class CompintAppTk(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.title('Wattage Calculator')
        self.initialize()
        self.mainloop()

    def initialize(self):
        self.grid()
        self["bg"] = "grey"

        ## Title & subtitle labels ---------------------------------------
        titlelbl = tk.Label(self, text="Wattage Calculator",
                              anchor="center", fg="black", bg="darkorange2")
        titlelbl.grid(column=0, row=0, columnspan=4, sticky='EW')

        ## Input Labels --------------------------------------------------

        sensitivitylbl = tk.Label(self, text="Loudspeaker sensitivity?",
                              anchor="w", fg="white", bg="SlateGray4")
        sensitivitylbl.grid(column=0,row=2,columnspan=3,sticky='EW')

        distancelbl = tk.Label(self, text="Distance from speaker to listening position?",
                              anchor="w", fg="white", bg="SlateGray4")
        distancelbl.grid(column=0, row=3, columnspan=3, sticky='EW')

        headroomlbl = tk.Label(self, text="How much headroom for amplifier?",
                              anchor="w", fg="white", bg="SlateGray4")
        headroomlbl.grid(column=0,row=4, columnspan=3, sticky='EW')

        wattagelbl = tk.Label(self, text="Total Wattage :",
                              anchor="w", fg="white", bg="SlateGray4")
        wattagelbl.grid(column=0, row=7, columnspan=3, sticky='EW')

        ## end of input labels ------------------------------------------------

        ## Input Boxes --------------------------------------------------------
        #self.sensitivity = tk.DoubleVar()
        #speakersensitivity = tk.Entry(self,textvariable=self.sensitivity)
        #speakersensitivity.grid(column=1,row=2,sticky='EW')

        self.sensitivity = tk.DoubleVar()
        speakersensitivity = tk.Entry(self, textvariable=self.sensitivity)
        speakersensitivity.grid(column=3, row=2, sticky='EW')

        self.distance = tk.DoubleVar()
        spkdistance = tk.Entry(self, textvariable=self.distance)
        spkdistance.grid(column=3, row=3, sticky='EW')

        self.headroom = tk.IntVar()
        spkheadroom = tk.Entry(self, textvariable=self.headroom)
        spkheadroom.grid(column=3, row=4, sticky='EW')

        ## end of input boxes -------------------------------------------------

        ## Button
        button = tk.Button(self,text="C A L C U L A T E",
                                anchor="w", fg="black", bg="green",
                                command=self.on_button_click)
        button.grid(column=0, row=6)

        # initialize global variables
        self.option = tk.IntVar(value=1)

        c = tk.Radiobutton(self, text="Meters", value=1, variable=self.option,
                      anchor="center", fg="grey25", bg="white")
        c.grid(column=2, row=6)

        c = tk.Radiobutton(self, text="Feet", value=2, variable=self.option,
                      anchor="center", fg="grey25", bg="white")
        c.grid(column=3, row=6)

        ## end of button

        ## Output labels
        self.amt = tk.StringVar(self)
        amtout = tk.Label(self, textvariable=self.amt,
                              anchor="e", fg="red", bg="gold")
        amtout.grid(column=3, row=7, sticky='EW')

        ## end of output labels -----------------------------------------------

        self.grid_columnconfigure(0, weight=2)
        self.resizable(0,0)


    def on_button_click(self):
        Lsens = self.sensitivity.get()
        D2 = self.distance.get()
        HR = self.headroom.get()

        selected = self.option.get()

        if selected == 1:
            print('meters')
        else:
            print('feet')

        try:    
            exponent = (Lreq-Lsens+20 * math.log10(D2/1)+HR)/10
            amount = 10 ** exponent
            self.amt.set(amount)
        except Exception as e:
            print(e)

if __name__ == "__main__":
    app = CompintAppTk()