【问题标题】:Tkinter how to change combobox widget arrow imageTkinter 如何更改组合框小部件箭头图像
【发布时间】:2019-11-24 22:23:46
【问题描述】:

我正在尝试更改组合框小部件中的箭头图像。我知道您需要创建一个新元素并为其设置样式。我一直在寻找有关如何执行此操作的信息,但似乎在网上找不到任何东西。在下面的代码中,我创建了图像并将其显示在标签中,但我希望该图像作为组合框箭头图像。

from tkinter import *
from tkinter import ttk

root_window = Tk()
style = ttk.Style()

photo = """
R0lGODlhDQAQAPQAAFw1Zl42Z2A6amE6amI7a2I8a2I8bKeHqK6BqbSLsLWLsLuV
t7ufu7yfu72hvL6ivb6ivr+jvsKgvsWlwseow8iqxcmrxs+1zNC2zdO70dS90tW9
0tW+0wAAAAAAAAAAACH5BAEAAB0ALAAAAAANABAAAAVMYCd2QFmOKJltGZCOwMZt
7kvKtH3P9RvzutgmZ4tdiL6NBUkyGTaSjMHkEjgyGcuiwnIIRoWIJUG2eFPhCYJy
fhUkmLbNcPjqRL1RCAA7
"""

photo = PhotoImage(data=photo)
l = ttk.Label(root_window, image=photo).grid()

style.layout(
    'Mystyle.TCombobox', [(
        'Combobox.field', {
            'sticky': NSEW,
            'children': [(
                'Combobox.downarrow', {
                    'side': 'right',
                    'sticky': NS
                }
            ), (
                'Combobox.padding', {
                    'expand': '1',
                    'sticky': NSEW,
                    'children': [(
                        'Combobox.textarea', {
                            'sticky': NSEW
                        }
                    )]
                }
            )]
        }
    )]
)

style.element_create('Mystyle.TCombobox.downarrow', 'image', photo)

cbo = ttk.Combobox(root_window, values=('one', 'two', 'three'), style='Mystyle.TCombobox')
cbo.grid()

root_window.mainloop()

【问题讨论】:

    标签: tkinter


    【解决方案1】:

    您非常接近,您只需要在您的自定义样式中使用您的元素。请注意以下示例中 Mystyle.TCombobox.downarrow 如何用作组合框中的子项之一:

    style.element_create('Mystyle.TCombobox.downarrow', 'image', photo)
    style.layout(
        'Mystyle.TCombobox', [(
            'Combobox.field', {
                'sticky': NSEW,
                'children': [(
                    'Mystyle.TCombobox.downarrow', {
                        'side': 'right',
                        'sticky': NS
                    }
                ), (
                    'Combobox.padding', {
                        'expand': '1',
                        'sticky': NSEW,
                        'children': [(
                            'Combobox.textarea', {
                                'sticky': NSEW
                            }
                        )]
                    }
                )]
            }
        )]
    )
    

    【讨论】:

    • 太好了,谢谢。在哪里可以找到为 ttk 创建自定义小部件的最佳文档?
    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多