我认为最好将Tkinter小部件名称从全局命名空间中删除,所以我将它们全部放在def main()中并称为main()。但是当我这样做时,ttk.Entry
停止显示默认文本。但是,如果我将其更改为tk.Entry
,它将起作用。
这可以通过如图所示的按钮和entry.get()
来完成,但是在我更大的应用程序中,我确实需要stringvar,据我所知,我需要tk.StringVar()
的{{1}}方法。
我尝试在条目名称的set()
方法中使用textvariable
,但效果相同。
我添加了一个config()
,因为它是ttk.Combobox
的一部分,并且存在相同的问题。
问题:示例3中为ttk.Entry
声明的两个全局变量有什么问题吗?为什么或者为什么不?我不知道何时在全局变量上划清界限。所有针对他们的抱怨使我永远都不想使用一个,但是也许在过程编码中这是不可能的?
示例1:默认文本显示在带有StringVar()
或tk.Entry
的条目中
ttk.Entry
示例2:默认文本以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()
而不是tk.Entry
的形式显示在条目中
ttk.Entry
示例3:对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()
的全局引用-返回全局范围?
StringVar()
答案 0 :(得分:1)
我已经看到有关此问题的参考。一定是tkinter.ttk中的错误-看起来变量x超出了范围,尽管为什么只在ttk.Entry和ttk.Label中发生而不是在与tk对应的原因中发生?
无论如何,以下是更整洁的解决方案,并且效果很好:
SELECT SND.userid, SND.firstname, SND.lastname, M.age, M.city, M.country
FROM msg as M
JOIN users as SND
ON SND.userid = M.msg_from
WHERE M.msg_to = 'userid 1' AND product = 'rice' AND price >='$100'