Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fresh tutorial on tkinter and ttk for Python 3 [closed]

Where can I find the most modern tutorial that teaches tkinter together with ttk?

Tkinter seems the only way to go in Python 3 (don't suggest Python 2), and ttk gave me hope for good-looking GUI.

like image 759
Oleh Prypin Avatar asked Jul 28 '11 21:07

Oleh Prypin


People also ask

What is the difference between tkinter and tkinter TTK?

Tkinter widgets are used to add Buttons, Labels, Text, ScrollBar, etc., however, tkinter. ttk supports a variety of widgets as compared to tkinter widgets. Tkinter. ttk doesn't support Place, Pack() and Grid(), thus it is recommended to use tkinter widget with ttk.

What is TTK button?

To invoke a function or a method of a class automatically when the button is clicked, you assign its command option to the function or method. This is called the command binding in Tkinter. To create a button, you use the ttk.Button constructor as follows: button = ttk.Button(container, **option)

What is Tk () in tkinter Python?

Tkinter is a Python package which comes with many functions and methods that can be used to create an application. In order to create a tkinter application, we generally create an instance of tkinter frame, i.e., Tk(). It helps to display the root window and manages all the other components of the tkinter application.


2 Answers

I have found the TkDocs tutorial to be very useful. It describes building Tk interfaces using Python and Tkinter and ttk and makes notes about differences between Python 2 and 3. It also has examples in Perl, Ruby and Tcl, since the goal is to teach Tk itself, not the bindings for a particular language.

I haven't gone through the whole thing from start to finish, rather have only used a number of topics as examples for things I was stuck on, but it is very instructional and comfortably written. Today reading the intro and first few sections makes me think I will start working through the rest of it.

Finally, it's current and the site has a very nice look. He also has a bunch of other pages which are worth checking out (Widgets, Resources, Blog). This guy's doing a lot to not only teach Tk, but also to improve people's understanding that it's not the ugly beast that it once was.

like image 200
Todd Avatar answered Oct 02 '22 17:10

Todd


I recommend the NMT Tkinter 8.5 reference.

  • Themed widgets
  • Customizing and creating ttk themes and styles
  • Finding and using themes
  • Using and customizing ttk styles
  • The ttk element layer

The module names used in some examples are those used in Python 2.7.
Here's a reference for the name changes in Python 3: link

One of the conveniences of ttk is that you can choose a preexistingtheme,
which is a full set of Styles applied to the ttk widgets.

Here's an example I wrote (for Python 3) that allows you to select any available theme from a 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() 

Side note: I've noticed that there is a 'vista' theme available when using Python 3.3 (but not 2.7).

like image 22
Honest Abe Avatar answered Oct 02 '22 17:10

Honest Abe