Dialogs in Tkinter
last modified January 30, 2024
In this article we work with dialogs.
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.
Tkinter 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.
#!/usr/bin/python from tkinter import Tk, BOTH from tkinter.ttk import Frame, Button from tkinter import messagebox as mbox class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.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.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.
from tkinter import messagebox as mbox
We import the messagebox
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): mbox.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.
Tkinter color chooser
The color chooser is a dialog for selecting a colour.
#!/usr/bin/python from tkinter import Tk, Frame, Button, BOTH, SUNKEN from tkinter import colorchooser class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.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) = colorchooser.askcolor() self.frame.config(bg=hx) def main(): root = Tk() ex = Example() 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) = colorchooser.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.
Tkinter file dialog
tkFileDialog
dialog allows a user to select a file from
the filesystem.
#!/usr/bin/python from tkinter import Frame, Tk, BOTH, Text, Menu, END from tkinter import filedialog class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("File dialog") self.pack(fill=BOTH, expand=1) menubar = Menu(self.master) self.master.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 = filedialog.Open(self, filetypes = ftypes) fl = dlg.show() if fl != '': text = self.readFile(fl) self.txt.insert(END, text) def readFile(self, filename): with open(filename, "r") as f: text = f.read() return text def main(): root = Tk() ex = Example() 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 = filedialog.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.
Source
In this article we worked with dialog windows.