我想在tkinter中创建一个带有两个Frame的GUI,并使底部框架变灰,直到某些事件发生.
下面是一些示例代码:
from tkinter import *
from tkinter import ttk
def enable():
frame2.state(statespec='enabled') #Causes error
root = Tk()
#Creates top frame
frame1 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame1.grid(column=0, row=0, padx=10, pady=10)
button2 = ttk.Button(frame1, text="This enables bottom frame", command=enable)
button2.pack()
#Creates bottom frame
frame2 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame2.grid(column=0, row=1, padx=10, pady=10)
frame2.state(statespec='disabled') #Causes error
entry = ttk.Entry(frame2)
entry.pack()
button2 = ttk.Button(frame2, text="button")
button2.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这是否可以,而不必单独灰显所有frame2的小部件?
我正在使用Tkinter 8.5和Python 3.3.
我有一个带有关联的“选择”按钮的列表框。我希望我的GUI能够双击任何列表框值来调用此按钮的命令。当选择一个选项并且用户双击窗口中的任何位置时,我的尝试(以下)有效。我希望它仅在双击选择本身(蓝色突出显示的行)时才起作用。
做这个的最好方式是什么?
from tkinter import *
def func1():
print("in func1")
def func2():
print("in func2")
def selection():
try:
dictionary[listbox.selection_get()]()
except:
pass
root = Tk()
frame = Frame(root)
frame.pack()
dictionary = {"1":func1, "2":func2}
items = StringVar(value=tuple(sorted(dictionary.keys())))
listbox = Listbox(frame, listvariable=items, width=15, height=5)
listbox.grid(column=0, row=2, rowspan=6, sticky=("n", "w", "e", "s"))
listbox.focus()
selectButton = Button(frame, text='Select', underline = 0, command=selection)
selectButton.grid(column=2, row=4, sticky="e", padx=50, pady=50)
root.bind('<Double-1>', lambda x: selectButton.invoke())
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我在 Windows 7 机器上使用 tkinter 8.5 和 python 3.3。
下面的代码以蓝色字体颜色呈现 Labelframe 的标题。
from tkinter import *
from tkinter import ttk
root = Tk()
lf = ttk.LabelFrame(root, text="Why is this blue?")
lf.pack()
label = ttk.Label(lf, text="label")
label.pack()
Run Code Online (Sandbox Code Playgroud)
我尝试通过添加 ttk.Style() 来解决此问题,但出现意外显示:
from tkinter import *
from tkinter import ttk
root = Tk()
s = ttk.Style()
s.configure('TLabelframe.Label', font='arial 14 bold')
lf = ttk.LabelFrame(root, text="Now it's black, but w/ a bizarre display"
" and no etched frame.", style='TLabelframe.Label')
lf.pack()
label = ttk.Label(lf, text="label")
label.pack() …Run Code Online (Sandbox Code Playgroud) 我的 tkinter 8.5 GUI(在 Windows 7 上)中有多个按钮。我希望当用户按 Enter 时选择聚焦(选项卡式)的任何按钮。我知道我必须绑定'<Return>',但我需要填补其余的空白。
提前致谢!
我是tkinter的新手并且有一个相当简单的问题.我希望将焦点从第一个窗口更改为弹出窗口后root的txt窗口.我也想要关注"确定"按钮.当然,这个想法是让用户在看到这个错误时能够点击输入.在使用focus(),focus_set()和takefocus进行各种尝试后,我非常困惑.我找不到这方面特别有用的文档.
以下是我的代码:
from tkinter import *
from tkinter import ttk
def close(self):
self.destroy()
def browse(*args):
fileName = filedialog.askopenfilename()
guiInputFile_entry.insert(0, fileName)
return fileName
def formatInput(*args):
if guiInputFile.get()[-4:] != ".txt": #checks for correct file extension (.txt)
txt = Tk()
txt.title("Error")
txtFrame = ttk.Frame(txt, padding="30 30 30 30")
txtFrame.grid(column=0, row=0, sticky=(N,W,E,S))
txtFrame.columnconfigure(0, weight=1)
txtFrame.rowconfigure(0, weight=1)
ttk.Label(txtFrame, text = "Please enter a .txt file.\n").grid(column=2, row=1)
okButton = ttk.Button(txtFrame, text = "OK", command = lambda: close(txt)).grid(column=2, row=2)
return
root = Tk() …Run Code Online (Sandbox Code Playgroud) 以下代码在IDLE中运行正常,但我得到"NameError:全局名称'messagebox'未定义".但是,如果我明确说明from tkinter import messagebox,它可以从任何地方运行.
from tkinter import *
from tkinter import ttk
root = Tk()
mainFrame = ttk.Frame(root)
messagebox.showinfo("My title", "My message", icon="warning", parent=mainFrame)
Run Code Online (Sandbox Code Playgroud)
为什么IDLE不需要显式的import语句,但在其他地方需要它?
python ×6
tkinter ×6
double-click ×1
focus ×1
frame ×1
listbox ×1
messagebox ×1
nameerror ×1
state ×1
ttk ×1