是否有可能获得Tkinter小部件的所有孩子,然后让孩子的孩子等?
基本上我想要在整个窗口中的所有小部件.
编辑: 我找到了一个利用布莱恩线的解决方案:
def all_children (wid) :
_list = wid.winfo_children()
for item in _list :
if item.winfo_children() :
_list.extend(item.winfo_children())
return _list
Run Code Online (Sandbox Code Playgroud) elif( listb[0] == "-test"):
run_all.set("testview")
listb.pop[0]
Run Code Online (Sandbox Code Playgroud)
错误:Tkinter回调中的异常回溯(最近一次调用最后一次):文件"/tools/python/2.7.2/lib/python2.7/lib-tk/Tkinter.py",第1410行,在调用 return self.func中(*args)文件"./edit.py",第581行,填充listb.pop [0] TypeError:'builtin_function_or_method'对象不可订阅
第581行由上面代码中的最后一个pop语句表示.run_all是一个StringVar.
为什么我会收到此错误以及如何解决?
有没有办法检测用户是否试图关闭窗口?例如,在Tkinter中我们可以这样做:
def exit_dialog():
#do stuff
pass
root = Tk()
root.protocol("WM_DELETE_WINDOW", exit_dialog)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
谢谢.
我的gui布局

看起来几乎没有像我期望的那样

所以我假设有一些我不明白的基础知识.
我假设框架包含他们自己的"网格空间"(行,列),但我看到的行为并不能解决这个问题,而且我不知道如何让事情按照我想要的方式运行到顶部框架.我的标签应该在跨越整个框架的"框架标签"下的同一行L到R上 - 除非他们没有.我希望实际看起来更像目标jpg,我想使用网格来做到这一点.
您只需看到绿框右侧的一个输入字段即可.它为什么要去那里?
from Tkinter import *
root = Tk()
root.title('Model Definition')
root.resizable(width=FALSE, height=FALSE)
root.geometry('{}x{}'.format(460, 350))
top_frame = Frame(root, bg='cyan', width = 450, height=50, pady=3).grid(row=0, columnspan=3)
Label(top_frame, text = 'Model Dimensions').grid(row = 0, columnspan = 3)
Label(top_frame, text = 'Width:').grid(row = 1, column = 0)
Label(top_frame, text = 'Length:').grid(row = 1, column = 2)
entry_W = Entry(top_frame).grid(row = 1, column = 1)
entry_L = Entry(top_frame).grid(row = 1, column = 3)
#Label(top_frame, text = '').grid(row …Run Code Online (Sandbox Code Playgroud) 可以通过以下方法控制Tkinter窗口的大小:
.minsize()
.maxsize()
.resizable()
Run Code Online (Sandbox Code Playgroud)
是否有相同的方法来控制Tkinter或ttk帧的大小?
@Bryan:我将你的frame1.pack代码改为:
frame1.pack(fill='both', expand=True)
frame1.bind( '<Configure>', maxsize )
Run Code Online (Sandbox Code Playgroud)
我添加了这个事件处理程序:
# attempt to prevent frame from growing past a certain size
def maxsize( event=None ):
print frame1.winfo_width()
if frame1.winfo_width() > 200:
print 'frame1 wider than 200 pixels'
frame1.pack_propagate(0)
frame1.config( width=200 )
return 'break'
Run Code Online (Sandbox Code Playgroud)
上面的事件处理程序检测到帧的宽度太大,但无法阻止大小的增加发生.这是Tkinter的限制还是我误解了你的解释?
我正在尝试使用带有标准库Tkinter的Python 3.2测试GUI代码,但我无法导入库.
这是我的测试代码:
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
shell报告此错误:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
from Tkinter import *
ImportError: No module named Tkinter
Run Code Online (Sandbox Code Playgroud) 如何在Tkinter中显示和隐藏小部件?我想要一个输入框,但不要一直显示它.有人能告诉我在tkinter中显示和隐藏条目小部件和其他小部件的功能吗?我希望能够在没有多个帧的情况下做到这一点.
我想要做的是使用tkinter filedialog选择多个文件,然后将这些项添加到列表中.之后,我想使用列表逐个处理每个文件.
#replace.py
import string
def main():
#import tkFileDialog
#import re
#ff = tkFileDialog.askopenfilenames()
#filez = re.findall('{(.*?)}', ff)
import Tkinter,tkFileDialog
root = Tkinter.Tk()
filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file')
Run Code Online (Sandbox Code Playgroud)
现在,我可以选择多个文件,但我不知道如何将这些文件名添加到列表中.有任何想法吗?
在a上绘制圆圈tkinter Canvas通常通过该create_oval方法完成.但是,提供边界框通常是考虑绘制圆形的一种令人困惑的方式.为它提供一个快捷方式并不是特别困难,但我找不到其他人做类似的事情,所以我会发布它希望别人觉得它有用.
我正在用tkinter编写一个小游戏,简单地说,我被卡住了.
我有一个类型的开始菜单,其中有两个按钮和一个标签.
如果我只是创建框架一切都很好,它的大小为500x500像素
我希望在创建按钮和labe时不改变背景,但无论我做什么,它都会调整大小.这是我的代码:
import tkinter as tk
def startgame():
pass
mw = tk.Tk() #Here I tried (1)
mw.title('The game')
back = tk.Frame(master=mw, width=500, height=500, bg='black')
back.pack()
go = tk.Button(master=back, text='Start Game', bg='black', fg='red',
command=lambda:startgame()).pack()
close = tk.Button(master=back, text='Quit', bg='black', fg='red',
command=lambda:quit()).pack()
info = tk.Label(master=back, text='Made by me!', bg='red',
fg='black').pack()
mw.mainloop()
Run Code Online (Sandbox Code Playgroud)
我在stackoverflow上搜索过,并没有得到任何有用的东西!我发现只有一个类似于我的问题,但答案没有用.我试过这个:
(1)mw.resizable(width = False,height = False)
我无法想象这是什么问题,我真的很绝望.