back

Programowanie GUI z Tkinter

Jak zacząć ?

Podstawą (oprócz czytania dokumentacji) są przykłady. Dobry zbiór takich przykładów można znaleźć na stronie: https://github.com/Programmica/python-tkinter-examples

Dobre wprowadzenie do Tkinter można znaleźć tutaj: http://thinkingtkinter.sourceforge.net/

Widgety Tkinter

Przykład

Kod źródłowy: integral_with_gui.tar.gz

Główny program z definicją interfejsu graficznego:

<sxh python> “”“ GUI for program calculating integrals over a mesh. ”“”

import tkinter from tkinter import ttk

import itertools import argparse import quadratures

from mesh import Mesh from integrands import Integrand from integrators import MeshIntegrator

class Integrator(ttk.Frame):

  """The adders gui and functions."""
  def __init__(self, parent, *args, **kwargs):
      ttk.Frame.__init__(self, parent, *args, **kwargs)
      self.root = parent
      self.init_gui()
  def on_quit(self):
      """Exits program."""
      quit()
  def calculate(self):
      """Calculates the sum of the two inputted numbers."""
      expression = self.expressin_entry.get()
      meshfile = 'mesh.dat'
      nnodes = 2
      mesh = Mesh()
      mesh.load(meshfile)
      integrand = Integrand(expression)
      quadrature = quadratures.make_quadrature("GaussLegendre", nnodes)
      integrator = MeshIntegrator()
      integral = integrator.integrate(mesh, integrand, quadrature)
      self.answer_label['text'] = integral

def init_gui(self):

      """Builds GUI."""
      self.root.title('Integrator')
      self.root.option_add('*tearOff', 'FALSE')
      self.grid(column=0, row=0, sticky='nsew')
      self.menubar = tkinter.Menu(self.root)
      self.menu_file = tkinter.Menu(self.menubar)
      self.menu_file.add_command(label='Exit', command=self.on_quit)
      self.menu_edit = tkinter.Menu(self.menubar)
      self.menubar.add_cascade(menu=self.menu_file, label='File')
      self.menubar.add_cascade(menu=self.menu_edit, label='Edit')
      self.root.config(menu=self.menubar)
      self.expressin_entry = ttk.Entry(self, width=25)
      self.expressin_entry.grid(column=1, row = 2)
      self.calc_button = ttk.Button(self, text='Calculate',
              command=self.calculate)
      self.calc_button.grid(column=0, row=3, columnspan=4)
      self.answer_frame = ttk.LabelFrame(self, text='Integral',
              height=100)
      self.answer_frame.grid(column=0, row=4, columnspan=4, sticky='nesw')
      self.answer_label = ttk.Label(self.answer_frame, text='')
      self.answer_label.grid(column=0, row=0)
      # Labels that remain constant throughout execution.
      ttk.Label(self, text='Integrate function over a mesh').grid(column=0, row=0,
              columnspan=4)
      ttk.Label(self, text='Function').grid(column=0, row=2,
              sticky='w')
      ttk.Separator(self, orient='horizontal').grid(column=0,
              row=1, columnspan=4, sticky='ew')
      for child in self.winfo_children():
          child.grid_configure(padx=5, pady=5)

if name == 'main':

  root = tkinter.Tk()
  Integrator(root)
  root.mainloop()        

</sxh>

  • pl/teaching/subjects/oop/lectures/gui.txt
  • Last modified: 2017/10/02 15:37
  • (external edit)