- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不明白为什么包管理器不允许您在顶部打包的小部件下方左右打包。以下代码的预期输出是
A
B
C D
E
但它只显示:
A
B
C D
import tkinter as tk
root = tk.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.state('zoomed')
root.geometry("%dx%d+0+0" % (w-15, h-75))
A = tk.LabelFrame(root,text='A', bd=2)
B = tk.LabelFrame(root,text='B', bd=2)
C = tk.LabelFrame(root,text='C', bd=2)
D = tk.LabelFrame(root,text='D', bd=2)
E = tk.LabelFrame(root,text='E', bd=2)
A.pack(fill=tk.BOTH, expand=tk.TRUE)
B.pack(fill=tk.BOTH, expand=tk.TRUE)
C.pack(side=tk.LEFT,fill=tk.BOTH, expand=tk.TRUE)
D.pack(side=tk.RIGHT,fill=tk.BOTH, expand=tk.TRUE)
E.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=tk.TRUE)
root.mainloop()
最佳答案
简而言之,打包器并非旨在直接创建您要创建的布局。你可以做到,但它需要一些额外的框架。在这种您显然要尝试创建网格的特殊情况下,grid
可以说是更好的选择。
在解释为什么会这样之前,让我提出一个解决方案。创建另一个名为“CD”的框架,它将用于保存 C
和 D
。然后,您可以将 C
放在左边,将 D
放在右边,然后将此框架放在 B
下方。这就是您使用打包器实现预期结果的方式。
A = tk.LabelFrame(root,text='A', bd=2)
B = tk.LabelFrame(root,text='B', bd=2)
CD = tk.Frame(root)
C = tk.LabelFrame(CD,text='C', bd=2)
D = tk.LabelFrame(CD,text='D', bd=2)
E = tk.LabelFrame(root,text='E', bd=2)
C.pack(side=tk.LEFT,fill=tk.BOTH, expand=tk.TRUE)
D.pack(side=tk.RIGHT,fill=tk.BOTH, expand=tk.TRUE)
A.pack(fill=tk.BOTH, expand=tk.TRUE)
B.pack(fill=tk.BOTH, expand=tk.TRUE)
CD.pack(fill=tk.BOTH, expand=tk.TRUE)
E.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=tk.TRUE)
打包器通过在未分配空间的一侧保留一 block 空间来工作。 此分配空间在将小部件打包到顶部或底部时占据未分配空间的整个宽度,并在左侧或右侧打包时占据整个高度。这是一个重要的细节。
让我试着用一些截图来描述它。在所有情况下,以下屏幕截图不显示帧,它们显示加壳器管理的已分配和未分配空间量。
当您沿顶部打包A
时(如果您未指定边,则默认为顶部),会为整个宽度保留一 block 空间根窗口。因为你把它打包到顶部,所以唯一剩余的空间在 A
下面。从此时起,A
的左侧或右侧不能再填充任何内容。
(实际上,您可以使用一些高级选项将东西放在左边或右边,但这超出了本说明的范围)
当您将 B 沿顶部打包时,唯一可用的空间在 A
下面。同样,因为您将它打包在顶部,所以在打包 B
之后,现在唯一可用的可用空间将位于 B
下方。
当您沿左侧打包 C
时,会为剩余空间的整个高度保留一 block 空间。这意味着 C
下不能放置任何内容。所有剩余空间都位于 C
的右侧和 B
的下方。
D
时,它必须位于C
的右侧和B
的下方。因为您将它打包到右侧,所以它会保留 D
上方和下方的所有剩余垂直空间。 当你把 E
放在底部时,它唯一能去的地方是 B
下面,C
的右边,并且到D
的左边。
由于打包器沿一侧分配所有空间的性质,当所有小部件都放置在同一轴上时,打包器的效果最好 - 垂直或水平堆叠。当您想像使用 C
和 D
那样切换轴时,通常最好将它们放在单独的框架中。在该框架内,您可以从左到右放置小部件,但该框架可以像其他小部件一样保持在从上到下的轴上。
注意:这是您的代码中实际发生的情况:E
被挤压在 C
和 D
之间。由于各种原因它不可见,但如果您给它一个明确的大小和颜色,它就会显示出来。
加壳算法的权威描述可以在tcl/tk man pages for pack中找到.
关于python - Tkinter pack 方法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390278/
我在运行 git gc --prune=now 并得到结果 Counting objects: 100% (619263/619263), done. Delta compression using
我想获取某个类中的所有链接。 HTML 的一个例子是 ES M3 E-mini S&P500 June 2013
我正在 32 位 ARM mcu(Atmel SAM4SD32C,Cortex-M4/ARMv7E-M 部件)上实现二进制日志记录系统,并且正在设计我的数据结构。我的目标是将日志格式描述为一个压缩结构
以下测试代码: [Test] public void PossibleHtmlAgilityPackBug() { const string html = @""; var doc =
如何利用 D3 圆包布局来得到类似这样的图表: (即使有更细长的椭圆)? 这种图表样式的关键应用是更容易放置标签。 这是 jsfiddle这演示了我为其他目的制作的圆包,但我想对于任何想要试验和测试涉
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在我正在处理的 WPF 应用程序中尝试使用合并的 ResourceDictionaries 解决问题时,我遇到了这个奇怪的问题。 我在外部 DLL(“通用”)中定义了自定义控件(TextButton、
在使用 webpack、webpacker gem 和 Rails 5.1 时,我注意到第一次运行 rspec 会生成 public/packs 和 public/packs-test 。 这些目录是
给定一个 HTML 文档,我想识别文档中的所有数字并在数字周围添加自定义标签。现在,我使用以下内容: HtmlNodeCollection bodyNode = htmlDoc.DocumentNod
我正在尝试使用 #pragma pack (n) 对齐数据成员.以下面为例: #include using namespace std; #pragma pack(8) // or (16) str
我正在尝试让 Html Agility Pack 在我的情况下工作。我需要检测现有 HTML 页面中的所有脚本元素并删除它们,将更改保存到另一个文件。在这里,bodyNode 返回正确数量的脚本标签,
我正在使用 GitLab,需要创建一个 .gitlab-ci.yml 脚本来为生成 nuGet 包的项目运行持续集成管道。 我在寻找可靠的文档来回答这个问题时遇到严重问题: 我应该使用 dotnet
我一直在尝试查找这个问题,但没有找到有效的解决方案。我的编译器忽略了#pragma pack(push) #pragma pack(2) 和 __ attribute __ ((aligned (2)
我正在尝试在 Ubuntu 10.10 上使用 Solaris Studio for Linux。 当我尝试构建以下代码时, const char * 名称 [] = { "苹果", "橙子", "芒
我正在尝试从 HTML 中删除不必要的内容。具体来说,我想删除评论。我找到了一个很好的解决方案( Grabbing meta-tags and comments using HTML Agility
我正在VHDL中的一个项目上工作,我需要从开关中获取4位输入,并根据其他开关的值向右或向左移动一定数量的位,该按钮需要在向右/向左移位之间切换。但是,当我尝试在Xilinx ISE中实现代码时,出现以
我有一台具有 SSH 访问权限的服务器,我想在那里放置一个 Git 源代码库。我刚刚在本地创建了一个 --bare --shared 存储库并将其复制到每个 SCP 的服务器。现在我想根据 SSH u
-moz-box-pack(或 box-pack)的 justify 属性似乎在 Firefox 中被忽略了。 Live example从我们的网站。每行中的数字应该右对齐,它们在 Chrome 中也
这是我的代码。我想知道如何“正确地”读取 BMP 文件,然后在不强制打包结构的情况下读取 header 值。 typedef struct __attribute__((packed)){ uint8
我是一名优秀的程序员,十分优秀!