python – 如何使用包或网格实现以下Tkinter GUI布局?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何使用包或网格实现以下Tkinter GUI布局?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2961字,纯文字阅读大概需要5分钟。
内容图文
![python – 如何使用包或网格实现以下Tkinter GUI布局?](/upload/InfoBanner/zyjiaocheng/730/32f1a39586454589a94d4214c375a5c3.jpg)
这是我目前的棋盘游戏GUI布局:
如你所见,它包括一个顶部的菜单,左边的画布,我绘制棋盘,右上角的工具栏(框架),我有各种格式/导航按钮,以及使用的文本小部件注释移动.目前,我正在为小部件使用网格布局.
这是我需要做的事情:
>当文本量大于窗口小部件大小时,能够在“文本”窗口小部件中显示/隐藏滚动条. (根据this article,这似乎需要网格布局.)
>通过“首选项”对话框更改“文本”窗口小部件中文本的字体和/或大小,而不是在“文本”窗口小部件周围留下奇怪的间隙. (这似乎需要一个包布局,因为Text小部件只能给出字符的宽度和高度而不是像素……这意味着当我更改字体或大小时,Text小部件会增大或缩小,并且窗口不会调整为了适应网格布局.我一直在尝试使用Font.measure根据所选字体调整文本小部件的大小,但我仍然会得到间隙,因为我无法将小部件调整到精确的像素.)
>我的最终解决方案需要跨平台(Windows和Linux,以及希望是Mac).
我可以使用哪种布局来满足我的要求?如果两者都不能完全发挥作用,哪种布局(网格或包装)会让我最接近目标?谢谢!
解决方法:
对于这种简单的布局,您可以使用grid,pack或两者.在这种特殊情况下,两者都没有明显的优势.两者都有你想要的调整大小行为.
在我的头顶,我会使用一个水平框架来按住按钮,并将按钮打包在其中.然后我可能会使用网格将工具栏,文本小部件和滚动条放在框架内.包装也可以使用,或者可以使用.这照顾了正确的一面.
如果你想让菜单栏处于图片中的方式(即:非标准,仅在棋盘上),我会使用类似的技巧:左侧的另一个框架,顶部装有菜单栏,底部是棋盘.
然后我会在主窗口中使用pack,底部是状态栏,左边是棋盘,右边是文本区域.
但是,最好使用标准的菜单栏,这意味着您不需要用于棋盘/菜单栏组合的容纳框架
这是使用标准菜单栏的一个解决方案的快速入侵.这使用了将大多数小部件作为父级子级的技术,然后使用in_参数将它们放入容器中.这使得以后更改布局变得更加容易,因为您不必更改整个层次结构,而只需在容器中放置窗口小部件.
import Tkinter as tk
import random
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
size = 40
menubar = tk.Menu(self)
menubar.add_cascade(label="Game")
menubar.add_cascade(label="Options")
menubar.add_cascade(label="Help")
chessboard = tk.Canvas(width=8*size, height=8*size, borderwidth = 0,
highlightthickness=0)
statusbar = tk.Label(self, borderwidth=1, relief="sunken")
right_panel = tk.Frame(self, borderwidth = 1, relief="sunken")
scrollbar = tk.Scrollbar(orient="vertical", borderwidth=1)
# N.B. height is irrelevant; it will be as high as it needs to be
text = tk.Text(background="white",width=40, height=1, borderwidth=0, yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
toolbar = tk.Frame(self)
for i in range(10):
b = tk.Button(self, text="B%s" % i, borderwidth=1)
b.pack(in_=toolbar, side="left")
self.config(menu=menubar)
statusbar.pack(side="bottom", fill="x")
chessboard.pack(side="left", fill="both", expand=False)
toolbar.grid(in_=right_panel, row=0, column=0, sticky="ew")
right_panel.pack(side="right", fill="both", expand=True)
text.grid(in_=right_panel, row=1, column=0, sticky="nsew")
scrollbar.grid(in_=right_panel, row=1, column=1, sticky="ns")
right_panel.grid_rowconfigure(1, weight=1)
right_panel.grid_columnconfigure(0, weight=1)
if __name__ == "__main__":
app = App()
app.mainloop()
内容总结
以上是互联网集市为您收集整理的python – 如何使用包或网格实现以下Tkinter GUI布局?全部内容,希望文章能够帮你解决python – 如何使用包或网格实现以下Tkinter GUI布局?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。