python-2.7 - 版本之间的 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, *args, **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, *args, **kwargs):
# pylint: disable=unused-argument
if hexversion < 0x03000000:
ttk.Frame.__init__(self, *args, **kwargs)
else:
super().__init__()
ttk.Label(self, text="asdf").grid(row=0, column=0)
self.tree = ScrolledTree(self)
self.tree.grid(row=1, column=0, sticky=tk.NW+tk.SE)
self.grid_rowconfigure(1, weight=1)
self.grid_columnconfigure(0, weight=1)
ttk.Style().configure("TFrame", background="red")
ttk.Style().configure("ScrolledTree.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, column=0, sticky=tk.NW+tk.SE)
root.mainloop()
root = tk.Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.title("Show - ScrolledFilterTree")
app = ScrolledFilterTree(root)
app.grid(row=0, column=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
and **kwargs
to super().__init__()
,即没有传递 parent 参数,ScrolledTree
将被放置在根窗口而不是ScrolledFilterTree
Python 3 中的框架中。
添加回来*args
并**kwargs
解决super().__init__()
问题。
推荐阅读
- javascript - Javascript:使用模式 Null 对象模式、RORO、未定义等作为 Get 函数的返回参数,以防请求的对象“未找到”
- wordpress - 使用 Woocommerce 订阅时如何更新交货日期?
- node.js - 使用 Cheerio 和 Request 抓取返回 503/403 错误
- javascript - 在 React Navigation (React Native) 中转到另一个文件的页面
- git - `git pull --rebase` 与 `git reset --soft origin/b` 有何不同
- python - 使用正则表达式、Python 3 捕获多个括号内的序列
- database - Microsoft Access 的更好替代方案?
- c# - 空 F# 可区分联合案例的 C# 类型
- c# - 如何一次性将 Angular 的 json 数据和表单数据(文件)发送到 ASP.NET WebAPI 控制器操作?
- arrays - 将重复项移动到排序数组的末尾