Путаница аргументов виджета Python Tkinter

from Tkinter import *

root = Tk()
root.title("Whois Tool")

text = Text()
text1 = Text()

text1.config(width=15, height=1)
text1.pack()

def button1():
 text.insert(INSERT, text1.get("1.0", END))

b = Button(root, text="Enter", width=10, height=2, command=button1)
b.pack()

scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
text.config(width=60, height=15)
text.pack(side=LEFT, fill=Y)
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)

root.mainloop()

Вышеприведенный скрипт работает без ошибок исключения, но если я изменяю стиль импорта: импортируйте Tkinter как Tk, он будет жаловаться на аргумент "LEFT, RIGHT, Y", и мне пришлось сделать их нижней буквой в строковой форме, как показано ниже, почему в том, что?

import Tkinter as tk

root = tk.Tk()
root.title("Whois Tool")

text = tk.Text()
text1 = tk.Text()

text1.config(width=15, height=1)
text1.pack()

def button1():
 text.insert('insert', text1.get("1.0", 'end'))
# text.insert(END, text1)

b = tk.Button(root, text="Enter", width=10, height=2, command=button1)
b.pack()

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side='right', fill='y')
text.config(width=60, height=15)
text.pack(side='left', fill='y')
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)

root.mainloop()
2 ответа

Когда вы используете "import Tkinter as Tk", вы должны вызвать все методы и свойства Tkinter, используя объект Tk. Поэтому вместо "left", "right" вы должны использовать Tk.LEFT, Tk.RIGHT...

В первом примере вы использовали "scrollbar = Scrollbar (root)". Но во втором вы написали "scrollbar = tk.Scrollbar(root)"

Вы вызываете все внутри Tkinter, используя объект Tk во втором примере. Дополнительную информацию о модулях Python можно найти здесь: http://www.tutorialspoint.com/python/python_modules.htm


LEFT, RIGHT и некоторые другие - константы, определенные Tkinter. Значения этих констант являются строками "left", "right" и т.д.

Когда вы делаете from Tkinter import *, эти константы импортируются вместе со всем остальным. Когда вы import Tkinter as tk, они не работают, как только ничего не импортируется. В этом случае вы можете обратиться к ним, полностью tk.LEFT их имени модуля, например: tk.LEFT, tk.RIGHT и т.д.

Независимо от того, как вы их импортируете, строчные строки всегда будут работать. Лично я не вижу смысла для констант, так как они действительно не приносят никакой пользы.

licensed under cc by-sa 3.0 with attribution.