Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有Tkinter的嵌套布局_Python_Tkinter_Tkinter Layout - Fatal编程技术网

Python 带有Tkinter的嵌套布局

Python 带有Tkinter的嵌套布局,python,tkinter,tkinter-layout,Python,Tkinter,Tkinter Layout,Tk文档(最后一节)说明可以使用Tk.frame实现嵌套布局。 以下小示例未按预期工作,而不是: 将tkinter作为tk导入 window=tk.tk() 窗几何(“250x100”) #第一级,作为父级的窗口 Label(window,text='Choose file:').grid(行=0,列=0,粘滞=tk.W) 按钮(窗口,text='Browse…').grid(行=1,列=0,粘性=tk.W) fr=tk.Frame(window.grid)(行=2,列=0,粘性=tk.W)

Tk文档(最后一节)说明可以使用
Tk.frame
实现嵌套布局。 以下小示例未按预期工作,而不是:

将tkinter作为tk导入
window=tk.tk()
窗几何(“250x100”)
#第一级,作为父级的窗口
Label(window,text='Choose file:').grid(行=0,列=0,粘滞=tk.W)
按钮(窗口,text='Browse…').grid(行=1,列=0,粘性=tk.W)
fr=tk.Frame(window.grid)(行=2,列=0,粘性=tk.W)
#嵌套,帧作为父对象
tk.Entry(fr.grid)(行=0,列=0,粘性=tk.W)
tk.Entry(fr.grid)(行=0,列=1,粘性=tk.W)
tk.mainloop()
它产生:


真正的UI要复杂得多,所以我真的希望使用嵌套网格,而不是一个包含多个列的网格。

AFAIK,
tkinter
如果同时创建对象和网格,则不会产生直观的结果。这将为您提供与文档相同的结果:

import tkinter as tk

window = tk.Tk()
window.geometry('250x100')

# first level, window as parent
tk.Button(window, text='Browse ...').grid(row=1, column=0, sticky=tk.W)
tk.Label(window, text='Choose file:').grid(row=0, column=0, sticky=tk.W)
fr = tk.Frame(window)
fr.grid(row=2, column=0, sticky=tk.W)

# nested, frame as parent
entry1 = tk.Entry(fr)
entry1.grid(row=0, column=0, sticky=tk.W)
entry2 = tk.Entry(fr)
entry2.grid(row=0, column=1, sticky=tk.W)

tk.mainloop()

阅读,你的
fr
None
因此父级是
root
。只需几秒钟就可以验证
fr
是否设置为你认为的值。布莱恩-你说得对,我太习惯静态类型语言了。但是为什么Python没有在这种情况下抛出错误呢?@Mikhail:因为没有要报告的错误。做你所做的是完全正确的,只是你期望发生的事情和记录发生的事情是两件不同的事情。这不是说“它不会产生好的结果”,而是它不会产生直观的结果。哦,我明白了-
fr
不是框架对象。我想知道为什么python会毫无错误地接受这样的代码“如果您同时创建一个对象和网格,tkinter不会产生好的结果。”:您对此有任何参考。@Mikhail“我想知道为什么python会毫无错误地接受这样的代码”:这是默认值,您可以通过调用
tk.NoDefaultRoot()