【问题标题】:how to enable & disable tabs in a Tkinter/Tix Python GUI如何在 Tkinter/Tix Python GUI 中启用和禁用选项卡
【发布时间】:2014-01-07 22:29:53
【问题描述】:

我正在尝试在 Python 中创建一个选项卡式 GUI,并且我希望能够切换选项卡的启用/禁用状态(即防止用户切换选项卡,并隐藏非活动选项卡以实现这一事实明显的)。到目前为止,我一直无法弄清楚如何进行这种状态切换。

我决定使用 Tkinter 和/或 Tix,因为它们内置于 Windows 上的 Python 发行版中(通过安装额外的第三方依赖项来指导我的用户将比它的价值更麻烦)。我曾与 Tkinter 合作过,但直到现在,Tix 才似乎需要它。因此,我根据http://svn.python.org/projects/python/trunk/Demo/tix/samples/NoteBook.py 的演示构建了一个包含两个选项卡的 Tix.NoteBook

对于禁用选项卡,Tix 选项卡实例的唯一相关属性(例如,演示代码中的 nb.hard_disk)似乎是 configure(),但天真地做一些类似 Tkinter 的事情,即 nb.hard_disk.configure(state=Tix.DISABLED),导致 @987654325 @

搜索“禁用 Tix 笔记本选项卡”不会产生任何结果,甚至更一般的“禁用 Tix 小部件”也不会产生任何我无法理解/使用的结果。感谢任何指向正确方向的指针。

【问题讨论】:

    标签: python tkinter python-2.5 tix


    【解决方案1】:

    一般而言,在 Tkinter 中禁用小部件的方法是将“状态”选项设置为 Tk.DISABLED 或更简单的方法,只需将其设置为字符串 "disabled"。以下内容会变灰并禁用您的标签:

    notebook.tab(0, state="disabled")

    其中 0 是您要禁用的选项卡的索引,而 notebook 是您的笔记本对象。这能回答你的问题吗?

    下面是一个简单的笔记本示例来演示:

    import Tkinter
    import ttk
    
    window = Tkinter.Tk()
    notebook = ttk.Notebook(window)
    notebook.pack()
    subframe = Tkinter.Frame(window)
    subframe.pack()
    notebook.add(subframe, text="tab", state="normal")
    def buttonaction():
        notebook.tab(0, state="disabled")
    button = Tkinter.Button(subframe, command=buttonaction, text="click to disable tab")
    button.pack()
    
    if __name__ == "__main__":
        window.mainloop()
    

    【讨论】:

    • 嗯,谢谢...这对我有帮助,因为它让我走上了 ttk 而不是 Tix 的轨道。跟进,似乎 Tix 已经过时了,而我没听说过的 ttk 是要走的路。但不幸的是,由于各种烦人的原因,我必须做很多工作才能最终摆脱对 Python 2.5 的支持——而且开箱即用的 Python 2.5 for Windows 附带的是 Tix 而不是 ttk。所以我真的在寻找 Tix 解决方案。
    • 我想我的印象是您想要 Tkinter 解决方案或 Tix 解决方案(顺便说一下,我在答案中将其拼错为 Wx)。也许 ttk 与 Tkinter 并不完全相同,但据我了解,它是 Tkinter 的插件/扩展,除其他外,您需要它才能使用 Notebook 小部件。不幸的是,我没有任何关于 Tix 的建议,但希望像你说的那样,也许我的例子能让你走上正确的 Tix 解决方案。
    • 我会将此标记为最佳解决方案,因为从某种意义上说,它是,即使它不是解决我的问题的那个。我将赏金授予 Jason Lv,因为他实际上为我破案了:pageconfigure 方法是我可以使用的方法,因为我坚持使用 Tix 的非理想约束,我怀疑我自己会找到它。跨度>
    【解决方案2】:

    这可能是您正在寻找的:

    nb.pageconfigure('hard_disk', state=Tix.DISABLED)
    

    http://tix.sourceforge.net/dist/current/man/html/TixCmd/tixNoteBook.htm#M27

    【讨论】:

    • 这赢得了赏金,因为它使我走上了可以在当前系统中使用的解决方案,即使我承认使用 ttk(Karim 的方法)从头开始会更整洁。没有 .pageconfigure 方法,但经过一番谷歌搜索,并登陆 mail.python.org/pipermail/tkinter-discuss/2009-April/… ,我找到了有效的解决方案 nb.tk.call(nb._w, 'pageconfigure', 'hard_disk', '-state', 'disabled')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多