python – Tkinter多帧调整大小
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Tkinter多帧调整大小,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3723字,纯文字阅读大概需要6分钟。
内容图文
![python – Tkinter多帧调整大小](/upload/InfoBanner/zyjiaocheng/816/ed6012be1d5644dcae4125f50c7b16d9.jpg)
我有一台了解多种串行协议的设备.在开发过程中,我创建了简单的Tkinter UI来使用协议.每个协议都有一个新的UI.由于协议有很多命令,我在可滚动画布中实现了整个UI,以便在较小的显示器上使用时可以滚动它.单独的UI工作正常,我现在正在尝试将单独的UI组合到选项卡式UI中.
每个UI的常见元素是串行端口选择器,我将其分离并放入单独的顶部框架中.然后,我实现了一个笔记本,并将每个协议UI放入每个选项卡的框架中.
但我无法正确控制大小调整:我希望根窗口宽度固定在任何协议帧或串行选择器帧的最大宽度,并禁用水平调整大小.我希望串行选择器始终存在,并且在垂直调整窗口大小时不会影响(仅调整笔记本大小/滚动).
以下是我到目前为止的情况.所有部件都存在,但笔记本没有填满整个窗口宽度,并且在调整窗口大小时笔记本不会调整大小(调整大小只会增加空白区域).
def main():
## Main window
root = Tkinter.Tk()
root.title("Multi-Protocol UI")
## Grid sizing behavior in window
root.grid_rowconfigure(0, weight=0)
root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=0)
## Window content
upper = ttk.Frame(root) # Serial port selector
upper.grid(row=0)
upper.grid_rowconfigure(0, weight=0)
upper.grid_columnconfigure(0, weight=1)
upper.grid_columnconfigure(1, weight=0)
lower = ttk.Frame(root) # For protocols
lower.grid(row=1)
lower.grid(row=1, sticky='nswe')
lower.grid_rowconfigure(0, weight=1)
lower.grid_columnconfigure(0, weight=1)
lower.grid_columnconfigure(1, weight=0)
# Setup serial control frame
serial = SerialFrame(master=upper) # Serial port selector widget + Open button
## Protocol GUIs are large: Use a form within a scrollable canvas.
cnv = Tkinter.Canvas(lower)
cnv.grid(row=0, column=0, sticky='nswe')
cnv.grid_rowconfigure(0, weight=1)
cnv.grid_columnconfigure(0, weight=1)
cnv.grid_columnconfigure(1, weight=0)
# Scrollbar for canvas
vScroll = Tkinter.Scrollbar(
lower, orient=Tkinter.VERTICAL, command=cnv.yview)
vScroll.grid(row=0, column=1, sticky='ns')
cnv.configure(yscrollcommand=vScroll.set)
# Frame in canvas
window = Tkinter.Frame(cnv)
window.grid()
# Put the frame in the canvas's scrollable zone
cnv.create_window(0, 0, window=window, anchor='nw')
# Setup the notebook (tabs) within the scrollable window
notebook = ttk.Notebook(window)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
notebook.add(frame1, text="ProtoA")
notebook.add(frame2, text="ProtoB")
notebook.grid(row=0, column=0, sticky='nswe')
# Create tab frames
protoA = ProtoAFrame(master=frame1)
protoA.grid()
protoA.update_idletasks()
protoB = ProtoBFrame(master=frame2)
protoB.grid()
protoB.update_idletasks()
## Update display to get correct dimensions
root.update_idletasks()
window.update_idletasks()
## Configure size of canvas's scrollable zone
cnv.configure(scrollregion=(0, 0, window.winfo_width(), window.winfo_height()))
# Not resizable in width:
root.resizable(width=0, height=1)
## Go!
root.mainloop()
如何锁定顶部串行框架,将笔记本电脑扩展到全宽,并强制窗口调整大小以仅影响笔记本电脑框架?我是Tkinter的新手,所以如果我错过了“明显的”,请保持温柔.
TIA!
解决方法:
你有小部件嵌套在小部件中.即使您将笔记本电脑设置为在其容器中正确扩展,您也需要确保每个容器向上也能正确扩展.你还没有这样做.例如,问问自己画布是否已设置为在较低的内部正确生长.
从你开始,这是我的建议.而不是试图一次性完成所有事情,而是选择“分而治之”的方法.首先,为GUI的主要区域创建框架.除了那些框架之外什么都不做,并让他们的调整大小行为完全符合您的要求.在这个阶段,它可以为每个颜色提供自己的颜色,以便您可以清楚地看到窗口小部件的位置.您可以随时更改颜色.此外,如果您只有几个小部件,或者所有小部件都是水平或垂直定向的,则打包通常比网格更容易使用.
例如:
upper.pack(side="top", fill="x", expand=False)
lower.pack(side="bottom", fill="both", expand=True)
一旦你让这些主要部分适当调整大小,就可以解决其中一个领域的问题了.选择一个区域,并执行相同的操作:添加其子窗口小部件,或者如果区域内有区域,则细分为框架.一旦你有这个工作,泡沫,冲洗,重复.
内容总结
以上是互联网集市为您收集整理的python – Tkinter多帧调整大小全部内容,希望文章能够帮你解决python – Tkinter多帧调整大小所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。