默认情况下,Tkinter按钮具有减号

时间:2017-11-08 14:18:01

标签: python tkinter

我在我的应用中使用了修补程序Radio Button,如下所示!

# Get checkboxes for Main Coin Selector
    checkbox_btc_main = tkinter.Radiobutton(app.window, text="BTC", variable=main_coin, value="btc", command=do_analyze_coin)
    checkbox_bcc_main = tkinter.Radiobutton(app.window, text="BCC", variable=main_coin, value="bcc", command=do_analyze_coin)
    checkbox_dash_main = tkinter.Radiobutton(app.window, text="DASH", variable=main_coin, value="dash", command=do_analyze_coin)
    checkbox_doge_main = tkinter.Radiobutton(app.window, text="DOGE", variable=main_coin, value="doge", command=do_analyze_coin)
    checkbox_eth_main = tkinter.Radiobutton(app.window, text="ETH", variable=main_coin, value="eth", command=do_analyze_coin)
    checkbox_ltc_main = tkinter.Radiobutton(app.window, text="LTC", variable=main_coin, value="ltc", command=do_analyze_coin)
    checkbox_nxt_main = tkinter.Radiobutton(app.window, text="NXT", variable=main_coin, value="nxt", command=do_analyze_coin)
    checkbox_str_main = tkinter.Radiobutton(app.window, text="STR", variable=main_coin, value="str", command=do_analyze_coin)
    checkbox_nem_main = tkinter.Radiobutton(app.window, text="NEM", variable=main_coin, value="xem", command=do_analyze_coin)
    checkbox_xrp_main = tkinter.Radiobutton(app.window, text="XRP", variable=main_coin, value="xrp", command=do_analyze_coin)

    # Get checkboxes for Coin Selector
    checkbox_btc = tkinter.Radiobutton(app.window, text="BTC", variable=coin, value="btc", command=do_analyze_coin)
    checkbox_bcc = tkinter.Radiobutton(app.window, text="BCC", variable=coin, value="bcc", command=do_analyze_coin)
    checkbox_dash = tkinter.Radiobutton(app.window, text="DASH", variable=coin, value="dash", command=do_analyze_coin)
    checkbox_doge = tkinter.Radiobutton(app.window, text="DOGE", variable=coin, value="doge", command=do_analyze_coin)
    checkbox_eth = tkinter.Radiobutton(app.window, text="ETH", variable=coin, value="eth", command=do_analyze_coin)
    checkbox_ltc = tkinter.Radiobutton(app.window, text="LTC", variable=coin, value="ltc", command=do_analyze_coin)
    checkbox_nxt = tkinter.Radiobutton(app.window, text="NXT", variable=coin, value="nxt", command=do_analyze_coin)
    checkbox_str = tkinter.Radiobutton(app.window, text="STR", variable=coin, value="str", command=do_analyze_coin)
    checkbox_nem = tkinter.Radiobutton(app.window, text="NEM", variable=coin, value="xem", command=do_analyze_coin)
    checkbox_xrp = tkinter.Radiobutton(app.window, text="XRP", variable=coin, value="xrp", command=do_analyze_coin)

    # Load Coin selector Button
    app.load_coin_selector_checkbox(checkbox_btc_main, rown=1, columnn=3)
    app.load_coin_selector_checkbox(checkbox_bcc_main, rown=2, columnn=3)
    app.load_coin_selector_checkbox(checkbox_dash_main, rown=3, columnn=3)
    app.load_coin_selector_checkbox(checkbox_doge_main, rown=4, columnn=3)
    app.load_coin_selector_checkbox(checkbox_eth_main, rown=5, columnn=3)
    app.load_coin_selector_checkbox(checkbox_ltc_main, rown=6, columnn=3)
    app.load_coin_selector_checkbox(checkbox_nxt_main, rown=7, columnn=3)
    app.load_coin_selector_checkbox(checkbox_str_main, rown=8, columnn=3)
    app.load_coin_selector_checkbox(checkbox_nem_main, rown=9, columnn=3)
    app.load_coin_selector_checkbox(checkbox_xrp_main, rown=10, columnn=3)

    # Load Coin selector Button
    app.load_coin_selector_checkbox(checkbox_btc, rown=1, columnn=4)
    checkbox_btc.deselect()
    app.load_coin_selector_checkbox(checkbox_bcc, rown=2, columnn=4)
    app.load_coin_selector_checkbox(checkbox_dash, rown=3, columnn=4)
    app.load_coin_selector_checkbox(checkbox_doge, rown=4, columnn=4)
    app.load_coin_selector_checkbox(checkbox_eth, rown=5, columnn=4)
    app.load_coin_selector_checkbox(checkbox_ltc, rown=6, columnn=4)
    app.load_coin_selector_checkbox(checkbox_nxt, rown=7, columnn=4)
    app.load_coin_selector_checkbox(checkbox_str, rown=8, columnn=4)
    app.load_coin_selector_checkbox(checkbox_nem, rown=9, columnn=4)
    app.load_coin_selector_checkbox(checkbox_xrp, rown=10, columnn=4)

这是另一个用于创建Radio Button并将其加载到应用

的文件中的代码
def create_coin_selector_checkbox(self, checkbox_text="Text", checkbox_value="Value"):
        return tkinter.Checkbutton(
            self.window, 
            text = checkbox_text,
            variable=checkbox_value
        )

    def load_coin_selector_checkbox(self, checkbox, rown = 0, columnn = 0):
        checkbox.grid(
            row=rown,
            column=columnn, 
            sticky='W',
            ipady = 2.5
        )

问题是第二列中的Radio Buttons显示为减号。虽然第一列中的Radio Buttons正确显示。我希望第二列中的Radio Buttons看起来像第一列中的Radio Buttons。这是应用程序窗口的快照!

1 个答案:

答案 0 :(得分:1)

按钮本质上设计为打开或关闭。在您的情况下,您将它们设置为第三个值,即空字符串。默认情况下,空字符串是tristatevalue选项的值。意思是,如果值是空字符串,则检查按钮以第三状态显示。其他一些工具包称之为 indeterminate 值。

这样做的原因是支持选择了一些孩子的父母。如果它们全部被选中,您可以检查父项,如果它们都未被选中,您可以取消选择父项,但如果选择了某些子项而某些子项未被选中,则需要父项的第三个可视状态。因此,tkinter支持此用例的三态值。

来自规范tcl/tk documentation

  

如果选中了一个检查按钮,则通常使用选定的外观绘制指标,并将与检查按钮关联的Tcl变量设置为特定值(通常为1)。指示符内部带有复选标记。如果未选中复选框,则使用取消选择的外观绘制指标,并将关联变量设置为不同的值(通常为0)。在内部没有复选标记的情况下绘制指标。 在变量(如果指定)具有与三态值匹配的值的特殊情况下,指示符以三态外观绘制,并处于指示混合或多个值的三态模式。

您可以通过以下方法之一解决此问题:

  1. 将checkbutton值明确设置为其中一个有效值(onvalueoffvalue)或
  2. 将值设置为onvalueoffvalue或空字符串以外的其他值,或
  3. 明确将tristatevalue设置为onvalueoffvalue或空字符串以外的其他内容,然后将值设置为空字符串