Я подумал, что было бы хорошо вытащить имена моих виджетов Tkinter из глобального пространства имен, поэтому я поместил их все в def main () и вызвал main ().Но когда я это сделал, ttk.Entry
перестал отображать текст по умолчанию.Но это работает, если я изменю его на tk.Entry
.
Это можно сделать с помощью кнопки и entry.get()
, как показано, но в моем более крупном приложении мне нужен stringvar, насколько я знаю, мне нужен метод tk.StringVar()
set()
.
Я попытался использовать textvariable
в методе config()
для имени записи, и он сделал то же самое.
Я добавил ttk.Combobox
, так как это часть ttk.Entry
, и он имеет то же самоепроблема.
ВОПРОС: Что-то не так с двумя глобальными переменными, объявленными для StringVar()
s в примере 3?Почему или почему нет?Я не знаю, когда провести черту на глобалах.Все эти разговоры заставляют меня никогда не хотеть использовать ни одного, но, возможно, это невозможно в процедурном кодировании?
ПРИМЕР 1: текст по умолчанию отображается в записи с tk.Entry
или ttk.Entry
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('200x200+500+300')
def get_txt():
lab2.config(text=ent.get())
x = tk.StringVar()
x.set("default entry text")
y = tk.StringVar()
y.set("default combo option")
ent = ttk.Entry(root, textvariable=x) # either tk or ttk can be used here and default text will show
lab = ttk.Label(root, textvariable=x)
lab2 = ttk.Label(root)
buttn = ttk.Button(root, text='GET TEXT', command=get_txt)
combo = ttk.Combobox(root, values=['dog', 'cat', 'goldfish'], textvariable=y)
lab3 = ttk.Label(root, textvariable=y)
ent.grid()
lab.grid()
lab2.grid()
buttn.grid()
combo.grid()
lab3.grid()
root.mainloop()
ПРИМЕР 2: текст по умолчанию отображается в записи с tk.Entry
, а не ttk.Entry
import tkinter as tk
from tkinter import ttk
def main():
def get_txt():
lab2.config(text=ent.get())
x = tk.StringVar()
x.set("default entry text")
y = tk.StringVar()
y.set("default combo option")
ent = tk.Entry(root) # this is where the ttk has to be changed to tk for the default text to show up
ent.config(textvariable=x)
lab = ttk.Label(root, textvariable=x)
lab2 = ttk.Label(root)
buttn = ttk.Button(root, text='GET TEXT', command=get_txt)
combo = ttk.Combobox(root, values=['dog', 'cat', 'goldfish'], textvariable=y) # there's no tk.Combobox
lab3 = ttk.Label(root, textvariable=y)
ent.grid()
lab.grid()
lab2.grid()
buttn.grid()
combo.grid()
lab3.grid()
root = tk.Tk()
main()
root.mainloop()
ПРИМЕР 3: глобальная ссылка на StringVar()
- назад к глобалам ??
import tkinter as tk
from tkinter import ttk
def main():
def get_txt():
lab2.config(text=ent.get())
# x = tk.StringVar()
x.set("default entry text")
# y = tk.StringVar()
y.set("default combo option")
ent = ttk.Entry(root) # this is where the ttk has to be changed to tk for the default text to show up
ent.config(textvariable=x)
lab = ttk.Label(root, textvariable=x)
lab2 = ttk.Label(root)
buttn = ttk.Button(root, text='GET TEXT', command=get_txt)
combo = ttk.Combobox(root, values=['dog', 'cat', 'goldfish'], textvariable=y) # there's no tk.Combobox
lab3 = ttk.Label(root, textvariable=y)
ent.grid()
lab.grid()
lab2.grid()
buttn.grid()
combo.grid()
lab3.grid()
root = tk.Tk()
x = tk.StringVar()
y = tk.StringVar()
main()
root.mainloop()