Почему шрифт tkinter создает ошибку атрибута? - PullRequest
0 голосов
/ 01 октября 2019

Я создаю простой интерфейс Tkinter, чтобы переключать некоторые реле и параллельно показывать некоторые данные датчика в метке;в настоящее время я хочу отобразить эти данные также в консоли. При выполнении кода я получаю сообщение об ошибке атрибута, что «объект не тип не имеет вызова атрибута».

Ошибка выглядит следующим образом:

Traceback (most recent call last):
  File "/home/pi/corect.py", line 14, in <module>
    FONT = tkinter.font.Font(family="Helvetica", size=12, weight="bold")
  File "/usr/lib/python3.7/tkinter/font.py", line 93, in __init__
    tk.call("font", "create", self.name, *font)
AttributeError: 'NoneType' object has no attribute 'call'

Код выглядит следующим образом:


from functools import partial
import tkinter as tk
import tkinter.font

from adafruit_ads1x15.ads1115 import ADS1115, P0
from adafruit_ads1x15.analog_in import AnalogIn
import board
import busio
from gpiozero import DigitalOutputDevice
from RPi import GPIO


FONT = tkinter.font.Font(family="Helvetica", size=12, weight="bold")


def toggle_releais_a(relais, widget):

    widget["text"] = "Turn Valve Up" if relais.is_active else "Stop"


def toggle_relais_b(relais, widget):
    widget["text"] = "Turn Valve Up" if relais.is_active else "Stop"
    relais.toggle()


def main():
    try:
        GPIO.setmode(GPIO.BCM)
        ads = ADS1115(busio.I2C(board.SCL, board.SDA))
        channel = AnalogIn(ads, P0)
        print(channel.value, channel.voltage)

        relais_a = DigitalOutputDevice(23)
        relais_b = DigitalOutputDevice(24)

        window = tk.Tk()
        window.title("Valve Toggler")

        options = dict(font=FONT, bg="bisque2")
        tk.Button(
            window, text="Exit", command=window.quit, width=12, **options
        ).grid(row=1, column=2)

        options["width"] = 24
        tk.Label(window, text="Value Valve 1", **options).grid(row=1, column=1)

        relais_a_button = tk.Button(window, text="Turn Valve Up", **options)
        relais_a_button.grid(row=2, column=1)

        relais_b_button = tk.Button(window, text="Turn Valve down", **options)
        relais_b_button.grid(row=3, column=1)


        relais_a_button["command"] = partial(
            toggle_releais_a, relais_a, relais_a_button
        )
        relais_b_button["command"] = partial(
            toggle_relais_b, relais_b, relais_b_button
        )

        window.mainloop()
    finally:
        GPIO.cleanup()


if __name__ == "__main__":
    main()


1 Ответ

1 голос
/ 01 октября 2019

FONT = tkinter.font.Font (family = "Helvetica", size = 12, weight = "bold")

Для этой вещи нужен мастер (root)

Это должно работать

window = tk.Tk()
FONT = tkinter.font.Font(root=window,family="Helvetica", size=12, weight="bold")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...