我制作了一个补角计算器,用于计算两个角是否等于或等于90,并且我还使用tkinter在GUI上工作,其中有一个应该执行功能的按钮,但事实并非如此,我已经做了很多工作,但是我不明白它是怎么了。
Tkinter按钮的以下命令必须执行一个功能
VCA
但是在我的代码中,它不起作用,我也不知道为什么。请有人帮助我!!! 这是我的代码:
class ViewControllerB: UIViewController {
var VCA: ViewControllerA!
@IBAction func themeButtonPressed(_ sender: Any?) {
if UserDefaults.standard.bool(forKey: "DarkThemeOn") {
//Set the background color to light for both the menu VC and VCA
view.backgroundColor = .white
VCA.view.backgroundColor = .white
} else {
//Set the background color to dark for both the menu VC and VCA
view.backgroundColor = .black
VCA.view.backgroundColor = .black
}
//Toggle the theme
UserDefaults.standard.set(!UserDefaults.standard.bool(forKey: "DarkThemeOn"), forKey: "DarkThemeOn")
}
}
为什么不执行function()? 感谢您的帮助!
答案 0 :(得分:0)
您的函数正在执行。
我怀疑问题是您期望angles
有所改变,但不会改变。您只需将其设置为一个值,然后就永远不要更改它。
相反,您需要推迟调用get()
方法,直到调用该函数为止。
def function():
angles = fir_angle.get() + sec_angle.get()
...
您还有一个逻辑问题,因为angles != 90 or angles != 180 or angles != 360
不能一次为三个值,因此angles
始终为真。语句的这三个部分中至少有两个永远是正确的。
例如,如果角度为90(即:angles != 90
为False
),则angles != 180
将为True
,而angles != 360
也将为{{ 1}},使语句True
与if False or True or True
相同。
答案 1 :(得分:0)
我们有几件事需要纠正。
首先让我们做*
而不是使用angles = fir_angle.get() + sec_angle.get()
,这样我们就不会覆盖其他导入。
下一步,让我们清理变量。我们不需要命名所有内容。只是我们稍后要致电的内容。
接下来,我们需要将format()
移到您的函数中,以便我们可以在需要时获取它们的值。
接下来,我们需要将您的函数重命名为“ function”,这是内部方法的名称,这会导致问题。
接下来让我们修复您的if语句。我们可以简单地检查值列表,并使用config()
作为文本。
让我们使用try / except添加一些错误处理。
您会发现我正在使用import tkinter as tk
root = tk.Tk()
root.title('Complement angles calculator')
root.geometry('400x400+0+0')
fir_angle = tk.IntVar()
sec_angle = tk.IntVar()
tk.Label(root, text='Complement angles calculator', font=('arial', 20), fg='steelblue').pack()
tk.Label(root, text='First angle : ', font=('arial', 20), fg='black').place(x=10, y=80)
tk.Entry(root, width=15, textvariable=fir_angle, bg='#ffffff').place(x=185, y=92)
tk.Label(root, text='Second angle : ', font=('arial', 20), fg='black').place(x=10, y=120)
tk.Entry(root, width=15, textvariable=sec_angle, bg='#ffffff').place(x=220, y=132)
lbl1 = tk.Label(root, font=('arial', 15))
lbl1.place(x=155, y=250)
lbl2 = tk.Label(root, font=('arial', 15))
lbl2.place(x=50, y=300)
def func(): # do not call functions 'function' its a built in method
try:
angles = fir_angle.get() + sec_angle.get()
lbl1.config(text='Resault :')
if angles in [90, 180, 360]:
lbl2.config(text='These are {}° Complement angles'.format(angles))
else:
lbl2.config(text='These are &$#@ Complement angles')
except:
lbl1.config(text='Error :')
lbl2.config(text='Invalid values in entry fields')
tk.Button(root, text='Are these Complement angles ?', font=('arial', 15), command=func).place(x=50, y=175)
root.mainloop()
更新标签,而不是尝试将标签彼此叠放。
grid()
我还建议您为小部件使用pack()
或place()
而不是grid()
,因为随着代码的增长,维护代码会更加容易。
以下是使用import tkinter as tk
root = tk.Tk()
root.title('Complement angles calculator')
root.geometry('400x300+0+0')
fir_angle = tk.IntVar()
sec_angle = tk.IntVar()
tk.Label(root, text='Complement angles calculator',
font=('arial', 20), fg='steelblue').grid(row=0, column=0, columnspan=2, sticky='w')
tk.Label(root, text='First angle: ', font=('arial', 20), fg='black').grid(row=1, column=0, sticky='e')
tk.Entry(root, width=15, textvariable=fir_angle, bg='#ffffff').grid(row=1, column=1)
tk.Label(root, text='Second angle: ', font=('arial', 20), fg='black').grid(row=2, column=0, sticky='e')
tk.Entry(root, width=15, textvariable=sec_angle, bg='#ffffff').grid(row=2, column=1)
lbl1 = tk.Label(root, font=('arial', 15))
lbl1.grid(row=4, column=0, columnspan=2, pady=(20, 0))
lbl2 = tk.Label(root, font=('arial', 15))
lbl2.grid(row=5, column=0, columnspan=2)
def func(): # do not call functions 'function' its a built in method
try:
angles = fir_angle.get() + sec_angle.get()
lbl1.config(text='Resault :')
if angles in [90, 180, 360]:
lbl2.config(text='These are {}° Complement angles'.format(angles))
else:
lbl2.config(text='These are &$#@ Complement angles')
except:
lbl1.config(text='Error :')
lbl2.config(text='Invalid values in entry fields')
tk.Button(root, text='Are these Complement angles ?', font=('arial', 15),
command=func).grid(row=3, column=0, columnspan=2)
root.mainloop()
的示例:
domainUsersCanEdit
结果:-不确定为什么图像太大。实际图像很小。
答案 2 :(得分:-2)
尝试在按钮小部件之后添加此行:
process.pack()