команда кнопки, не исключающая функцию - PullRequest
0 голосов
/ 26 сентября 2019

Я сделал калькулятор углов дополнения, который вычисляет, равны ли два угла дополнения или равны 90, и я также работал над графическим интерфейсом с помощью tkinter, в нем есть кнопка, которая должна выполнять функцию, но это не так, яМы так много работали над этим, но я не мог понять, что с ним не так.

Команды кнопки Tkinter, подобные приведенной ниже, должны выполнять функцию

process = Button(root, text="click!", command=function).pack()

, но в моих кодах этоне работает, и я не знаю почему.ПОЖАЛУЙСТА, кто-нибудь, помогите мне !!!вот мои коды:

from tkinter import *

root = Tk()
root.title("Complement angles calculator")
root.geometry("400x400+0+0")

heading_app = Label(root, text="Complement angles calculator", font=("arial", 20), fg="steelblue").pack()
angle1 = Label(root, text="First angle : ", font=("arial", 20), fg="black").place(x=10, y=80)

fir_angle = IntVar()
angle1_box = Entry(root, width=15, textvariable=fir_angle, bg="#ffffff").place(x=185, y=92)


angle2 = Label(root, text="Second angle : ", font=("arial", 20), fg="black").place(x=10, y=120)

sec_angle = IntVar()
angle2_box = Entry(root, width=15, textvariable=sec_angle, bg="#ffffff").place(x=220, y=132)

angles = fir_angle.get() + sec_angle.get()

def function():
    if angles == 90:
        text = Label(root, text="Resault :", font=("arial", 15)).place(x=155, y=250)
        text = Label(root, text="These are 90° Complement angles", font=("arial", 15)).place(x=50, y=300)

    if angles == 180:
        text = Label(root, text="Resault :", font=("arial", 15)).place(x=155, y=250)
        text = Label(root, text="These are 180° Complement angles", font=("arial", 15)).place(x=50, y=300)

    if angles == 360:
        text = Label(root, text="Resault :", font=("arial", 15)).place(x=155, y=250)
        text = Label(root, text="These are 360° Complement angles", font=("arial", 15)).place(x=50, y=300)

    if angles != 90 or angles != 180 or angles != 360:
        text = Label(root, text="Resault :", font=("arial", 15)).place(x=155, y=250)
        text = Label(root, text="These are NOT Complement angles", font=("arial", 15)).place(x=40, y=300)
function()

process = Button(root, text="Are these Complement angles ?", font=("arial", 15), command=function).place(x=50, y=175)

root.mainloop()


Почему он не выполняет функцию ()?Я ценю, что вы помогаете мне!

Ответы [ 3 ]

0 голосов
/ 26 сентября 2019

Ваша функция выполняется .

Я подозреваю, что проблема в том, что вы ожидаете, что 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 также будет True, делая утверждение if False or True or True, что совпадает с if (False is True) or (True is True) or (True is True).

0 голосов
/ 26 сентября 2019

У нас есть несколько вещей, которые нужно исправить.

Сначала давайте сделаем import tkinter as tk вместо использования * Таким образом, мы не перезаписываем другие операции импорта.

Далее давайте очистим ваши переменные,Нам не нужно называть все.Просто то, что мы собираемся вызвать позже.

Далее нам нужно переместить angles = fir_angle.get() + sec_angle.get() в вашу функцию, чтобы мы могли получить значения в тот момент, когда они необходимы.

Далее нам нужнопереименуйте вашу функцию в «function» - это имя внутреннего метода, и это вызовет проблемы.

Далее давайте исправим ваши операторы if.Мы можем просто проверить список значений и использовать format() для текста.

Позволяет добавить некоторую обработку ошибок с помощью try / исключением.

Вы заметите, что я использую config() для обновленияметки вместо того, чтобы пытаться размещать метки друг над другом.

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()

Результаты: - Не уверен, почему это изображение такое большое.Фактическое изображение маленькое.

enter image description here

0 голосов
/ 26 сентября 2019

Попробуйте добавить эту строку после виджета кнопки:

process.pack ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...