Tkinter 如何正确设置组合框滚动条的样式

Posted

技术标签:

【中文标题】Tkinter 如何正确设置组合框滚动条的样式【英文标题】:Tkinter how to correctly style a combobox scrollbar 【发布时间】:2020-09-15 03:18:55 【问题描述】:

我正在尝试设置组合框小部件滚动条的样式。我想设置槽的颜色和大小。 我已经能够通过更改箭头大小参数来设置大小,如下面的代码所示。这是不可取的,因为它会更改所有小部件的所有垂直滚动条。我想针对特定的小部件。

import tkinter as tk
import tkinter.ttk as ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        self.title('Default Demo')
        self.geometry('420x200')

        style = ttk.Style()
        style.configure('my.TCombobox', arrowsize=30)
        style.configure('Vertical.TScrollbar', arrowsize=28)
        # style.configure('my.TCombobox.Vertical.TScrollbar', arrowsize=28)

        values = []
        for idx in range(1, 50):
            values.append(f'Testing-idx')

        cbo = ttk.Combobox(self, values=values, style='my.TCombobox')
        cbo.grid(ipady=5)


def main():
    app = App()
    app.mainloop()


if __name__ == '__main__':
    main()

【问题讨论】:

如果你想要不同的风格,那么你需要创造一些。您可以做多个服装样式的滚动条并将它们添加到您想要的小部件中。也许我错过了这里的问题。 你还需要看看这个适合你的颜色 ***.com/questions/28375591/…> @Atlas435,我正在尝试在组合框下拉菜单中设置滚动条的样式。我不知道如何解决它。我尝试了上面注释掉的代码,但它什么也没做。 【参考方案1】:

组合框的滚动条不能通过python接口直接访问,但是可以通过tcl解释器改变它的样式。

首先,为组合框的下拉列表命名:

self.tk.eval('set popdown [ttk::combobox::PopdownWindow %s]' % cbo)

然后改变滚动条的样式:

self.tk.eval(f'$popdown.f.sb configure -style my.TCombobox.Vertical.TScrollbar')

完整示例:

import tkinter as tk
import tkinter.ttk as ttk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        self.title('Default Demo')
        self.geometry('420x200')

        style = ttk.Style()
        style.configure('my.TCombobox', arrowsize=30)
        style.configure('my.TCombobox.Vertical.TScrollbar', arrowsize=28)

        values = []
        for idx in range(1, 50):
            values.append(f'Testing-idx')

        cbo = ttk.Combobox(self, values=values, style='my.TCombobox')
        cbo.grid(ipady=5)

        self.tk.eval('set popdown [ttk::combobox::PopdownWindow %s]' % cbo)
        self.tk.eval(f'$popdown.f.sb configure -style my.TCombobox.Vertical.TScrollbar')

        ttk.Scrollbar(self, orient='vertical').grid(row=0, column=1, sticky='ns')

if __name__ == '__main__':
    app = App()
    app.mainloop()

【讨论】:

以上是关于Tkinter 如何正确设置组合框滚动条的样式的主要内容,如果未能解决你的问题,请参考以下文章

qt 将最大高度设置为下拉组合框(样式 cleanlooks)

如何查看tkinter中有哪些控件,以及控件有哪些属性

如何设置 WPF 组合框的样式以使其看起来更像以前的版本

如何设置滚动条的样式?

如何将样式应用于动态组合框项目?

如何以编程方式将垂直滚动条添加到组合框