迫使radiobutton使用钻石作为指标,Tcl / Tk 8.6

时间:2017-08-30 21:36:45

标签: tcl tk

在将应用程序从Tcl / Tk 8.4移植到8.6的过程中。出于历史原因,我们希望保持单选按钮指示器具有钻石的形状。从the 8.6 docs开始,这似乎是可能的:

A radiobutton is a widget that displays a textual string, bitmap or image and a diamond 
or circle called an indicator.

但是,我无法弄清楚如何让单选按钮使用钻石。

一种可能性是使用ttk::radiobutton,但是,它不是替代品。 ttk::radiobutton无法识别我们当前使用的-anchor选项。

1 个答案:

答案 0 :(得分:1)

指标形状取决于平台;确切的渲染通常以大致遵循主机平台风格指南的方式完成(因为它们代表编写代码的时候,唉)。指标形状不作为Tk API的可控特征暴露,因为控制如何完成是通过哪个渲染代码在C级编译。改变这一点非常麻烦,你真的应该问自己,你是否真的需要那些旧的Motif外观(这就是那些钻石的来源)。

具有正确主题的Ttk小部件做得更好(classic主题有钻石),但是将其部分布局功能精确地移动到样式系统中,因为锚定之类的东西是通常由平台样式指南指定。我们可以覆盖......但是Ttk的文档很差。但是,tkdocs style tutorial要好得多。特别是,我们可以使用它来查看我们可以创建一个派生样式,它将应用您想要的额外选项,并且可以在您想要的地方应用。

# Switch to classic style
ttk::style theme use classic

# Make the style. Derived because of the . and the existing style name
ttk::style configure RightAnchor.TRadiobutton -anchor e

# Make some widgets that use the style
ttk::radiobutton .example1 -variable foo -value foo -text "This is an example" \
    -style RightAnchor.TRadiobutton
ttk::radiobutton .example2 -variable foo -value bar -text "This is also an example" \
    -style RightAnchor.TRadiobutton
# This one doesn't use the style, for comparison
ttk::radiobutton .example3 -variable foo -value boo -text "This is not an example"
pack .example1 .example2 .example3 -fill x

我不确定这对你有用吗 - Ttk 非常复杂并且有很多功能,它根本不提供与我一样多的反馈#39;喜欢 - 但这是我最好的主意。如果这不起作用,那么你的主要选择就是制作一个megawidget(可能使用画布)来做你真正想要的东西,但这需要很多工作。

您的钻石 真的 是否必要?普通用户对不同平台上的无线电按钮的期望可能不再期望它们了。