56

tkinter我在哪里可以找到最现代的教程ttk

Tkinter 似乎是使用 Python 3 的唯一方法(不建议使用 Python 2),并ttk给了我对好看的 GUI 的希望。

4

4 回答 4

53

我发现TkDocs教程非常有用。它描述了使用 Python 和和构建Tk接口,并记录了 Python 2 和 3 之间的差异。它还有 Perl、Ruby 和 Tcl 的示例,因为目标是教授 Tk 本身,而不是特定语言的绑定。Tkinterttk

我没有从头到尾完成整个事情,而只是使用了一些主题作为我坚持的事情的例子,但它非常具有指导性和舒适性。今天阅读介绍和前几节让我觉得我将开始完成剩下的工作。

最后,它是最新的,并且该网站的外观非常漂亮。他还有许多其他值得一试的页面(小部件、资源、博客)。这家伙做了很多工作,不仅教 Tk,而且还提高了人们对它不再是曾经的丑陋野兽的认识。

于 2011-07-29T16:53:14.413 回答
20

我推荐NMT Tkinter 8.5 参考

某些示例中使用的模块名称是 Python 2.7 中使用的模块名称。
这是 Python 3 中名称更改的参考:link

ttk的便利之一是您可以选择一个预先存在的 theme,它是应用于ttk
小部件 的全套样式

这是我编写的一个示例(针对 Python 3),它允许您从Combobox中选择任何可用的主题:

import random
import tkinter
from tkinter import ttk
from tkinter import messagebox

class App(object):

    def __init__(self):
        self.root = tkinter.Tk()
        self.style = ttk.Style()
        available_themes = self.style.theme_names()
        random_theme = random.choice(available_themes)
        self.style.theme_use(random_theme)
        self.root.title(random_theme)

        frm = ttk.Frame(self.root)
        frm.pack(expand=True, fill='both')
    # create a Combobox with themes to choose from
        self.combo = ttk.Combobox(frm, values=available_themes)
        self.combo.pack(padx=32, pady=8)
    # make the Enter key change the style
        self.combo.bind('<Return>', self.change_style)
    # make a Button to change the style
        button = ttk.Button(frm, text='OK')
        button['command'] = self.change_style
        button.pack(pady=8)

    def change_style(self, event=None):
        """set the Style to the content of the Combobox"""
        content = self.combo.get()
        try:
            self.style.theme_use(content)
        except tkinter.TclError as err:
            messagebox.showerror('Error', err)
        else:
            self.root.title(content)

app = App()
app.root.mainloop()

旁注:我注意到使用 Python 3.3(但不是 2.7)时有一个“vista”主题可用。

于 2013-02-26T05:27:16.377 回答
3

我建议阅读文档。它简单而权威,适合初学者。

于 2014-04-25T13:13:45.383 回答
0

它不是很新鲜,但简洁,而且从我所看到的对 Python 2 和 3 都有效。

于 2012-01-06T10:02:15.377 回答