- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
除了已记录的类之外,ttk.Spinbox 类和 tk.Spinbox 类之间有什么区别?
我发现了一些差异,例如:
'%d'
,而 tk.Spinbox 打印 'up'
或 'down'
(下面的工作示例)后者是一个错误吗?如果是,有办法解决这个问题吗?我想使用 ttk.Spinbox,因为 tk.Spinbox 没有正确设置样式,没有 .set() 等。
以下代码生成两个 Spinbox。第一个继承自 tkinter,第二个继承自 ttk。它们的修改是相同的。
import tkinter as tk
import tkinter.ttk as ttk
class TkSpinbox(tk.Spinbox):
def __init__(self, *args, **kwargs):
super().__init__(*args, increment = 1, **kwargs)
self.tcl_do_upon_clicking_arrows = self.register(self.do_upon_clicking_arrows)
self.config(command = (self.tcl_do_upon_clicking_arrows, '%d'))
self.tcl_validate = self.register(self.validate)
self.config(validate = 'all', validatecommand = (self.tcl_validate, '%d'))
def do_upon_clicking_arrows(self, direction):
print(direction)
def validate(self, typeOfAction):
print(typeOfAction)
return(True)
class TtkSpinbox(ttk.Spinbox):
def __init__(self, *args, **kwargs):
super().__init__(*args, increment = 1, **kwargs)
self.tcl_do_upon_clicking_arrows = self.register(self.do_upon_clicking_arrows)
self.config(command = (self.tcl_do_upon_clicking_arrows, '%d'))
self.tcl_validate = self.register(self.validate)
self.config(validate = 'all', validatecommand = (self.tcl_validate, '%d'))
def do_upon_clicking_arrows(self, direction):
print(direction)
def validate(self, typeOfAction):
print(typeOfAction)
return(True)
root = tk.Tk()
tkSpinbox = TkSpinbox()
ttkSpinbox = TtkSpinbox()
tkSpinbox.grid()
ttkSpinbox.grid()
root.mainloop()
2018 年 12 月,tkinter 8.6 进行了更新,其中向 ttk 添加了 Spinbox。据我了解,在 tkinter 8.5 中,没有特殊的 ttk.Spinbox,尽管 ttk.Spinbox 确实遵循 ttk 的 Style 等。所以必须定义一些东西,对吗?
我在 tkinter 8.6 和 8.5 中尝试过这个(据说没有 Spinbox 但仍然正确设置样式)并得到了相同的结果。即,ttk.Spinbox 打印 '%d'
,而 tk.Spinbox 打印 'up'
或 'down'
。然而,validatecommand 在这两种情况下都按预期工作。
我检查了the Tk source code bug repository查了bug报告,但没有发现这个问题。我是否正确使用了 ttk.Spinbox 的命令?
最佳答案
使用 Tcl/Tk:
按下箭头后 ttk.Spinbox 设置为 0,而 tk.Spinbox没有。
必须设置 -to 值。
ttk.Spinbox 不会通过按箭头来验证更改,而 tk.Spinbox 会。
实际上是 tk.spinbox 中的一个错误——它做得太多了。如果输入有效,则向上或向下操作不会使其无效。
在 OSX 上按下 ttk.Spinbox 箭头按钮时,tk.Spinbox 不会亮起箭头按钮可以。在 Windows 上,两者都会亮起。
OSX 小部件实现与 Windows 是分开的,并且都试图与原生外观和感觉相匹配。实现问题。
至关重要的是,检索方向适用于 tk.Spinbox,但不适用于 ttk.Spinbox:ttk.Spinbox 打印“%d”,而 tk.Spinbox 打印“向上”或“向下”(下面的工作示例)
这里的问题是,python 在 tcl_do_upon_clicking_arrows 内部做什么?Tk 中没有特定的绑定(bind)可以执行此操作。没有 %d 个绑定(bind)参数在 Tk 中返回向上/向下。
这是一个 python tkinter 问题。
在 Tk 中,关联变量或验证命令的跟踪将用于跟踪更改。
关于python - ttk.Spinbox 和 tk.Spinbox 之间的行为差异是什么(ttk 中的箭头方向有问题吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753119/
我是一名优秀的程序员,十分优秀!