Являются ли виджеты классами или методами в Tkinter? - PullRequest
3 голосов
/ 26 мая 2020

Текстовый виджет создается с использованием метода Text().

import tkinter as tk 
root = tk.Tk()
T = tk.Text(root, height=2, width=30) 
T.pack() 
T.insert(tk.END, "Just a text Widget\nin two lines\n") 
w = tk.Label(root, text="Hello Tkinter!") 
w.pack() 
root.mainloop()

Я новичок в Python. Насколько я понимаю, Text и Label являются классами, а T и w - объектами, созданными из классов Text и Label. Но в приведенном выше текстовом примере веб-сайт упомянул, что

Текстовый виджет создается с использованием метода Text().

Я совсем запуталась. pack() - это метод, и мы можем применять методы к объектам (здесь T и w), которые мы создали из таких классов, как Label и Text.

Пожалуйста, дайте мне знать, если такие виджеты, как Label, Text, Button, и т. д. c. являются классами или методами.

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Виджеты Tkinter - это классы.

Но в приведенном выше примере текста на веб-сайте упоминалось, что текстовый виджет создается с помощью метода Text ().

Этот веб-сайт это неверно. Это классы, и вы можете убедиться в этом, просмотрев исходный код tkinter, где вы увидите определения классов для каждого из виджетов (Text, Label, Frame, et c).

Например, первая часть текстового виджета выглядит так (взято из файла __ init __. Py tkinter):

class Text(Widget, XView, YView):
    """Text widget which can display text in various forms."""
    def __init__(self, master=None, cnf={}, **kw):
        """Construct a text widget with the parent MASTER.

        STANDARD OPTIONS

            background, borderwidth, cursor,
            exportselection, font, foreground,
            highlightbackground, highlightcolor,
            highlightthickness, insertbackground,
            insertborderwidth, insertofftime,
            insertontime, insertwidth, padx, pady,
            relief, selectbackground,
            selectborderwidth, selectforeground,
            setgrid, takefocus,
            xscrollcommand, yscrollcommand,

        WIDGET-SPECIFIC OPTIONS

            autoseparators, height, maxundo,
            spacing1, spacing2, spacing3,
            state, tabs, undo, width, wrap,

        """
        Widget.__init__(self, master, 'text', cnf, kw)
0 голосов
/ 26 мая 2020

Модуль inspect может помочь вам прояснить вашу путаницу.

In [37]: import inspect

In [38]: from tkinter import Text

In [39]: T = Text()

In [40]: inspect.isclass(Text)
Out[40]: True

In [41]: inspect.ismethod(Text)
Out[41]: False

In [42]: inspect.ismethod(T.pack)
Out[42]: True
...