我是编码的新手,我为计算器编写了一些代码,用于解决工作中的一些问题。
我现在不想尝试为"脚"添加检查按钮。 &安培; "米&#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()
我希望你们都能提供帮助,因为我很难找到任何关于此的事情。
答案 0 :(得分:1)
您可以使用Radiobutton仅选择一个选项meters
或feet
您使用一个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:我们对CamelCaseNames
或Label
等类使用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()