从tkinter创建新的ttk小部件

Fat*_*923 5 python tkinter widget ttk

实际上,我试图创造ttk.Spinboxtkinter.Spinbox.我可以像下面那样操纵代码ttk.Scrollbar.tkinter.Spinbox按钮为我的GUI提供旧的外观,这就是我想要的原因ttk.Spinbox.

编辑:我Python 3.4在Windows 7操作系统上使用.我需要一个主题的Spinbox小部件.ttk.__init__文件没有Spinbox类/模块.因此,我打开该文件并编写代码,就像Scrollbar下面给出的类一样.

class Scrollbar(Widget, tkinter.Scrollbar):
    """Ttk Scrollbar controls the viewport of a scrollable widget."""

    def __init__(self, master=None, **kw):
        """Construct a Ttk Scrollbar with parent master.

        STANDARD OPTIONS

            class, cursor, style, takefocus

        WIDGET-SPECIFIC OPTIONS

            command, orient
        """
        Widget.__init__(self, master, "ttk::scrollbar", kw)
Run Code Online (Sandbox Code Playgroud)

和我放入ttk.__init__.py文件的代码.它继承自tkinter.Spinbox.

class Spinbox(Widget, tkinter.Spinbox):
    """spinbox widget."""
    def __init__(self, master=None, **kw):
        Widget.__init__(self, master, "ttk::spinbox", kw)
Run Code Online (Sandbox Code Playgroud)

下面给出的测试结果是令人满意的.但是在内容之前有一个缩进 Spinbox Widget

tkinter.Spinbox小部件 tkinter.Spinbox小部件

ttk.Spinbox小部件 ttk.Spinbox小部件

有什么不对?为什么会出现缩进?

import tkinter as tk
import tkinter.ttk as ttk

class Spinbox(ttk.Widget):
    def __init__(self, master, **kw):
        ttk.Widget.__init__(self, master, 'ttk::spinbox', kw)

if __name__ == '__main__':
    root = tk.Tk()
    root.grid_columnconfigure(0, weight=1)
    opts = { 'from_': 5, 'to': 10, 'increment': 1 }
    sp1 = tk.Spinbox(root, from_=5, to=10)
    sp1.grid(row=0, column=0)
    sp2 = Spinbox(root, from_=5, to=10)
    sp2.grid(row=1, column=0,  columnspan=2, sticky="we",pady=2)
    root.mainloop()
Run Code Online (Sandbox Code Playgroud)

如果展开根窗口,ttk.Spinbox则会显示带有它的展开和缩进.我想这是由于columnconfigure但我需要配置以获得更好的外观.

pat*_*yts 3

在 Windows 7 上使用 python 3.4 我没有得到相同的缩进。这是一个演示:

import tkinter as tk
import tkinter.ttk as ttk

class Spinbox(ttk.Widget):
    def __init__(self, master, **kw):
        ttk.Widget.__init__(self, master, 'ttk::spinbox', kw)

if __name__ == '__main__':
    root = tk.Tk()
    opts = { 'from': 0, 'to': 10, 'increment': 1 }
    sp1 = tk.Spinbox(root, **opts)
    sp1.place(x=5, y=5)
    sp2 = Spinbox(root, **opts)
    sp2.place(x=5, y=30)
    root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果:

tk spinbox 和 ttk spinbox 的屏幕截图

如果您在输入字段区域中出现额外缩进,则可能是您使用空格或制表符格式化该值。