按钮命令不执行该功能

时间:2019-09-26 20:30:04

标签: python function button tkinter

我制作了一个补角计算器,用于计算两个角是否等于或等于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()? 感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您的函数正在执行

我怀疑问题是您期望angles有所改变,但不会改变。您只需将其设置为一个值,然后就永远不要更改它。

相反,您需要推迟调用get()方法,直到调用该函数为止。

def function():
    angles = fir_angle.get() + sec_angle.get()
    ...

您还有一个逻辑问题,因为angles != 90 or angles != 180 or angles != 360不能一次为三个值,因此angles始终为真。语句的这三个部分中至少有两个永远是正确的。

例如,如果角度为90(即:angles != 90False),则angles != 180将为True,而angles != 360也将为{{ 1}},使语句Trueif 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

结果:-不确定为什么图像太大。实际图像很小。

enter image description here

答案 2 :(得分:-2)

尝试在按钮小部件之后添加此行:

process.pack()