返回介绍

Dialogs in Tkinter

发布于 2025-02-22 22:19:31 字数 7684 浏览 0 评论 0 收藏 0

In this part of the Tkinter tutorial, we will work with dialogs.

Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.

Message boxes

Message boxes are convenient dialogs that provide messages to the user of the application. The message consists of text and image data. Message boxes in Tkinter are located in the tkMessageBox module.

messagebox.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode Tkinter tutorial

In this program, we show various
message boxes.

Author: Jan Bodnar
Last modified: November 2015
Website: www.zetcode.com
"""

from ttk import Frame, Button
from Tkinter import Tk, BOTH
import tkMessageBox as mbox

class Example(Frame):
  
  def __init__(self, parent):
    Frame.__init__(self, parent)   
     
    self.parent = parent    
    self.initUI()
    
    
  def initUI(self):
    
    self.parent.title("Message boxes")  
    self.pack()
    
    error = Button(self, text="Error", command=self.onError)
    error.grid(padx=5, pady=5)
    warning = Button(self, text="Warning", command=self.onWarn)
    warning.grid(row=1, column=0)
    question = Button(self, text="Question", command=self.onQuest)
    question.grid(row=0, column=1)
    inform = Button(self, text="Information", command=self.onInfo)
    inform.grid(row=1, column=1)


  def onError(self):
    mbox.showerror("Error", "Could not open file")
    
  def onWarn(self):
    mbox.showwarning("Warning", "Deprecated function call")
    
  def onQuest(self):
    mbox.askquestion("Question", "Are you sure to quit?")
    
  def onInfo(self):
    mbox.showinfo("Information", "Download completed")
     

def main():
  
  root = Tk()
  ex = Example(root)
  root.geometry("300x150+300+300")
  root.mainloop()  


if __name__ == '__main__':
  main()  

We use the grid manager to set up a grid of four buttons. Each of the buttons shows a different message box.

import tkMessageBox as mbox

We import the tkMessageBox which has the functions that show dialogs.

error = Button(self, text="Error", command=self.onError)

We create an error button, which calls the onError() method. Inside the method, we show the error message dialog.

def onError(self):
  box.showerror("Error", "Could not open file")

In case we pressed the error button, we show the error dialog. We use the showerror() function to show the dialog on the screen. The first parameter of this method is the title of the message box, the second parameter is the actual message.

Error message dialog
Figure: Error message dialog

Color chooser

The color chooser is a dialog for selecting a colour. It is located in the tkColorChooser module.

colorchooser.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode Tkinter tutorial

In this script, we use tkColorChooser
dialog to change the background of a frame.

Author: Jan Bodnar
Last modified: November 2015
Website: www.zetcode.com
"""

from Tkinter import Tk, Frame, Button, BOTH, SUNKEN
import tkColorChooser 

class Example(Frame):
  
  def __init__(self, parent):
    Frame.__init__(self, parent)   
     
    self.parent = parent    
    self.initUI()
    
    
  def initUI(self):
    
    self.parent.title("Color chooser")    
    self.pack(fill=BOTH, expand=1)
    
    self.btn = Button(self, text="Choose Color", 
      command=self.onChoose)
    self.btn.place(x=30, y=30)
    
    self.frame = Frame(self, border=1, 
      relief=SUNKEN, width=100, height=100)
    self.frame.place(x=160, y=30)


  def onChoose(self):
    
    (rgb, hx) = tkColorChooser.askcolor()
    self.frame.config(bg=hx)
     

def main():
  
  root = Tk()
  ex = Example(root)
  root.geometry("300x150+300+300")
  root.mainloop()  


if __name__ == '__main__':
  main()  

We have a button and a frame. Clicking on the button we show a color chooser dialog. We will change the background color of the frame by selecting a colour from the dialog.

(rgb, hx) = tkColorChooser.askcolor()
self.frame.config(bg=hx)

The askcolor() function shows the dialog. If we click OK, a tuple is returned. It is a colour value in RGB and hexadecimal format. In the second line we change the background colour of the frame with the returned colour value.

tkColorChooser
Figure: tkColorChooser

File dialog

tkFileDialog dialog allows a user to select a file from the filesystem.

filedialog.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode Tkinter tutorial

In this program, we use the
tkFileDialog to select a file from
a filesystem.

author: Jan Bodnar
last modified: November 2015
website: www.zetcode.com
"""


from Tkinter import Frame, Tk, BOTH, Text, Menu, END
import tkFileDialog 

class Example(Frame):
  
  def __init__(self, parent):
    Frame.__init__(self, parent)   
     
    self.parent = parent    
    self.initUI()
    
    
  def initUI(self):
    
    self.parent.title("File dialog")
    self.pack(fill=BOTH, expand=1)
    
    menubar = Menu(self.parent)
    self.parent.config(menu=menubar)
    
    fileMenu = Menu(menubar)
    fileMenu.add_command(label="Open", command=self.onOpen)
    menubar.add_cascade(label="File", menu=fileMenu)    
    
    self.txt = Text(self)
    self.txt.pack(fill=BOTH, expand=1)


  def onOpen(self):
    
    ftypes = [('Python files', '*.py'), ('All files', '*')]
    dlg = tkFileDialog.Open(self, filetypes = ftypes)
    fl = dlg.show()
    
    if fl != '':
      text = self.readFile(fl)
      self.txt.insert(END, text)
      

  def readFile(self, filename):

    f = open(filename, "r")
    text = f.read()
    return text
     

def main():
  
  root = Tk()
  ex = Example(root)
  root.geometry("300x250+300+300")
  root.mainloop()  


if __name__ == '__main__':
  main()  

In our code example, we use the tkFileDialog dialog to select a file and display its contents in a Text widget.

self.txt = Text(self)

This is the Text widget in which we will show the contents of a selected file.

ftypes = [('Python files', '*.py'), ('All files', '*')]

These are file filters. The first shows only Python files, the other shows all files.

dlg = tkFileDialog.Open(self, filetypes = ftypes)
fl = dlg.show()

The dialog is created and shown on the screen. We get the return value, which is the name of the selected file.

text = self.readFile(fl)

We read the contents of the file.

self.txt.insert(END, text)

The text is inserted into the Text widget.

tkFileDialog
Figure: tkFileDialog

In this part of the Tkinter tutorial, we worked with dialog windows.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文