如何解决版本之间的 Python / Tkinter grid_rowconfigure 问题
处理一些我在 Python 3.9 中遇到的奇怪行为。grid_rowconfigure
没有像我期望的那样扩展行。
不幸的是,在 python3.9.2 或 Tk8.6 中寻找已报告的错误无处可去。
请在下面找到复制代码。
#!/usr/bin/python
"""
Code Stripped for Stackoverflow.
"""
from sys import hexversion
if hexversion < 0x03000000:
# pylint: disable=import-error
# if we are in 0x02whaterver that works
import Tkinter as tk
import ttk
else:
import tkinter as tk
from tkinter import ttk
class ScrolledTree(ttk.Frame):
""" A Scrolled Treeview
"""
def __init__(self,*args,**kwargs):
# pylint: disable=unused-argument
if hexversion < 0x03000000:
ttk.Frame.__init__(self,**kwargs)
else:
super().__init__()
self.grid_rowconfigure(0,weight=1)
self.grid_columnconfigure(0,weight=1)
self.tree = ttk.Treeview(self)
self.tree.grid(row=0,column=0,sticky=tk.NW+tk.SE)
ttk.Style().configure("TFrame",background="red")
ttk.Style().configure("ScrolledTree.TFrame",background="blue")
class ScrolledFilterTree(ttk.Frame):
""" A Scrolled Tree with Filters
"""
def __init__(self,**kwargs)
else:
super().__init__()
ttk.Label(self,text="asdf").grid(row=0,column=0)
self.tree = ScrolledTree(self)
self.tree.grid(row=1,sticky=tk.NW+tk.SE)
self.grid_rowconfigure(1,weight=1)
ttk.Style().configure("TFrame",background="blue")
def test_show():
root = tk.Tk()
root.grid_rowconfigure(0,weight=1)
root.grid_columnconfigure(0,weight=1)
root.title("Show - ScrolledTree")
app = ScrolledTree(root)
app.grid(row=0,sticky=tk.NW+tk.SE)
root.mainloop()
root = tk.Tk()
root.grid_rowconfigure(0,weight=1)
root.title("Show - ScrolledFilterTree")
app = ScrolledFilterTree(root)
app.grid(row=0,sticky=tk.NW+tk.SE)
root.mainloop()
#end test_show
if __name__ == "__main__":
test_show()
什么东西看起来很奇怪?
左边的ScrolledText classes
(Python2.7 / Tk8.5) 右边的 (Python 3.9 / Tk8.6) 都很好。
在 ScrolledFilteredText
中使用它们会导致:
有什么解释为什么这些看起来不同吗? 或者 - 更准确地说 - 在重新缩放根窗口时表现不同?
更新 1
操作系统:Windows 10 20H2 (19042.985) x64
Python: 2.7.16 x64(v2.7.16:413a49145e,2019 年 3 月 4 日,01:37:19)
Python: 3.9.2 x64(标签/v3.9.2:1a79785,2021 年 2 月 19 日,13:44:55)
Tk/Tcl:来自 python 发行版的库存版本。
非常感谢任何帮助。
解决方法
由于您没有将 *args
和 **kwargs
传递给 super().__init__()
,即没有传递父参数,ScrolledTree
将被放入根窗口而不是 {{1 }} Python 3 中的框架。
将 ScrolledFilterTree
和 *args
重新添加到 **kwargs
将解决该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。