相信大家程序写多了,尤其是把自己的代码给别人用时,都有这样一个体会:“我前段时间写了一份代码,现在,又需要改代码了,比如,改代码里面的文件路径,之前定义的常量,才能运行起来从而解决手头的问题。”如果想避免每次都改代码,那应该怎么做呢???这就是本文要解决的问题,即通过GUI操作,也就是当程序运行时,弹一些窗口出来让用户输入程序运行所需的参数,这样一来,就不必去改代码了。GUI,即图形用户接口(Graphical User Interface),通俗来说就是具有按钮,文本框,单选框、复选框等元素的程序界面,Python中最常用的GUI有tkinter、PyQT、wxPython。本文中,小编分享一些Python自带的(标准库)GUI模块——tkinter的基本使用方法。tkinter是一个比较轻量的GUI框架,只能通过一行一行地写代码的方式来做界面,因此简单的程序界面,还是比较简单,比较人性化的,但是做复杂的程序界面,就很让人头疼了,而且做出来也难看,因此对于tkinter,小编只打算介绍一些简单的对话框控件的使用,满足日常需求中,程序运行时能够弹出窗口让用户填写参数即可!值得欣慰的是,ArcMap中,也可以使用tkinter来做对话框。后边有机会小编会给大家分享一些PyQT的GUI开发经验,PyQT不仅仅可以用代码来写界面,也可以像C#生态中WinForm一样,通过拖拽的方式来做界面,而且做出来的界面也相对好看一些!

tkinter对话框简介

在开始本文各种对话框之前,须要导入以下下几个tkinter模块。注意Python是严格区分大小写的,因此这里说的是tkinter而非Tkinter。此外,对话框必须依赖于一个tkinter顶级app,因此,在开始使用下文中介绍的对话框之前,除了引入必要的包之外,还需定义顶级app。相应代码如下:

from tkinter import Tk
from tkinter.simpledialog import askinteger, askfloat, askstring
from tkinter.filedialog import askopenfilename, askopenfilenames, asksaveasfilename, askdirectory
from tkinter.messagebox import showinfo, showwarning, showerror

if __name__ == "__main__":
    #
    app = Tk()  #初始化GUI程序
    app.withdraw() #仅显示对话框,隐藏主窗口
    ##
    #
    #下文中对话框的代码放在这里
    #
    ##
    app.destroy() #关闭GUI窗口,释放资源
  • 下表罗列了本文中介绍的所有对话框的作用及其常用的参数:

对话框

作用

所需参数

askinteger

弹出一个对话框,接受用户输入一个整型数(当用户错误的输入浮点数或者字符串时,该对话框会弹出警告提示窗,并让用户重新输入)

title,prompt

askfloat

弹出一个对话框,接受用户输入一个浮点数

title,prompt

askstring

弹出一个对话框,接受用户输入一个字符或字符串,当用户输入数字(包括浮点数时,该对话框将会将用户的输入转换为字符类型在返回给用户)

title,prompt

askopenfilename

弹出一个对话框,让用户选择一个指定后缀名的文件

title,filetypes

askopenfilenames

弹出一个对话框,让用户选择一个或多个指定后缀名的文件

title,filetypes

asksaveasfilename

弹出一个对话框,让用户创建或选择一个指定后缀名的文件

title,filetypes,defaultextension

askdirectory

弹出一个对话框,让用户创建或选择一个指定后缀名的文件

title

showinfo

弹出一个对话框,用以显示提示信息,弹窗上为圆形蓝色感叹号图标

title,message

showwarning

弹出一个对话框,用以显示警告信息,弹窗上为三角形黄色感叹号图标

title,message

showerror

弹出一个对话框,用以显示错误信息,弹窗上为错误×图标

title,message

数据输入框

当所编写的程序中需要用户给出一个整型数、浮点型或者字符(串)时,除了直接让用户修改代码外,最直接的办法就是分别使用如下对话框,让用户直接输入,这样可避免不懂代码的小白修改代码。

(1)整型数输入对话框

var_int = askinteger(title = "请输入一个整数",
                     prompt = "整型变量x:")

python的tk如何设置输入框文字 tkinter输入对话框_Tkinter


这里输入的是15,该对话框不会保存,但当输入浮点数或者字符时,对话框将弹出如下警告信息的对话框:

python的tk如何设置输入框文字 tkinter输入对话框_文件对话框_02

(2)浮点数输入对话框

var_float = askfloat(title = "请输入一个浮点数",
                     prompt = "浮点型变量x:")

python的tk如何设置输入框文字 tkinter输入对话框_python的tk如何设置输入框文字_03

(3)字符或字符串输入对话框

var_string = askstring(title ="请输入一个字符或字符串",
                       prompt = "字符型变量x:")

python的tk如何设置输入框文字 tkinter输入对话框_Tkinter_04

文件对话框

实际编程处理数据时,很多数据都存放在Excel文件、csv文件、tif影像文件中,此时,就需要在程序中定义一个变量并将相应的文件路径赋值给该变量,但一旦将程序拷给别人用,或者自己的数据文件路径发生改变,则需要修改代码。因此,小编推荐大家使用文件对话框的方式,来代替在代码中直接编写文件路径。文件包括打开文件对话框、保存文件对话框、选择文件夹(目录)对话框,这应该是各类程序中用得最多的一组对话框,下面,小编介绍了两个对话框的使用方式。

(1)打开一个文件对话框

# 选择打开一个文件
open_file_path = askopenfilename(title = "请选择一个要打开的Excel文件",
                                 filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                              ("Microsoft Excel 97-20003 文件", "*.xls")])

python的tk如何设置输入框文字 tkinter输入对话框_输入框_05

(2) 打开一个或多个文件对话框

# 一次性打开多个文件,askopenfilenames,多了一个s,复数形式
open_file_path_list = askopenfilenames(title = "请选择一个要打开的Excel文件",
                                       filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                    ("Microsoft Excel 97-20003 文件", "*.xls")])

python的tk如何设置输入框文字 tkinter输入对话框_文件对话框_06

(3)保存文件对话框

#saveas而非save,此外未指定defaultextension参数时,则需要在对话框中收到添加文件后缀名
save_file_path = asksaveasfilename(title = "请创建或者选择一个保存数据的Excel文件",
                                   filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                ("Microsoft Excel 97-20003 文件", "*.xls")],
                                   defaultextension = ".xlsx")

python的tk如何设置输入框文字 tkinter输入对话框_python的tk如何设置输入框文字_07


python的tk如何设置输入框文字 tkinter输入对话框_Tkinter_08

(4)选择文件夹(目录)对话框

select_directory = askdirectory(title = "请选择一个文件夹")

python的tk如何设置输入框文字 tkinter输入对话框_输入框_09

消息提醒框

消息对话框的作用是什么?比如,可以在程序运行完毕时,弹出一个对话框告诉用户,程序执行完毕。相对于文件对话框,对于一般的需求来说,如果不做程序的异常处理,则消息对话框的使用场景比较少。这里小编介绍了3个对话框——消息提示对话框、程序警告对话框、程序错误对话框。

showinfo(title = "提示",
         message = "这是一个提示信息对话框!")

python的tk如何设置输入框文字 tkinter输入对话框_python的tk如何设置输入框文字_10

showwarning(title = "警告",
            message = "这是一个警告信息对话框!")

python的tk如何设置输入框文字 tkinter输入对话框_Tkinter_11

showerror(title = "错误",
          message = "这是一个错误信息对话框!")

python的tk如何设置输入框文字 tkinter输入对话框_文件对话框_12

完整代码及运行动图如下所示

# -*- coding:utf-8 -*-

from tkinter import Tk
from tkinter.simpledialog import askinteger, askfloat, askstring
from tkinter.filedialog import askopenfilename, askopenfilenames, asksaveasfilename, askdirectory
from tkinter.messagebox import showinfo, showwarning, showerror

if __name__ == "__main__":
    #
    app = Tk()  #初始化GUI程序
    app.withdraw() #仅显示对话框,隐藏主窗口
    ##
    #
    showinfo(title = "提示",
              message = "这是一个提示信息对话框!")
    showwarning(title = "警告",
                message = "这是一个警告信息对话框!")
    showerror(title = "错误",
              message = "这是一个错误信息对话框!")
    #
    showinfo(title = "提示",
              message = "程序程序即将开始运行!")
    #
    var_int = askinteger(title = "请输入一个整数",
                         prompt = "整型变量x:")
    var_float = askfloat(title = "请输入一个浮点数",
                         prompt = "浮点型变量x:")
    var_string = askstring("请输入一个字符或字符串",
                           prompt = "字符型变量x:")
    #
    open_file_path = askopenfilename(title = "请选择一个要打开的Excel文件",
                                     filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                  ("Microsoft Excel 97-20003 文件", "*.xls")])
    open_file_path_list = askopenfilenames(title = "请选择一个或多个要打开的Excel文件",
                                           filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                        ("Microsoft Excel 97-20003 文件", "*.xls")])
    save_file_path = asksaveasfilename(title = "请创建或者选择一个保存数据的Excel文件",
                                       filetypes = [("Microsoft Excel文件", "*.xlsx"),
                                                    ("Microsoft Excel 97-20003 文件", "*.xls")],
                                       defaultextension = ".xlsx")
    select_directory = askdirectory(title = "请选择一个文件夹")
    #
    print("var_int:",var_int)
    print("var_float:",var_float)
    print("var_string:",var_string)
    print(open_file_path)
    print(open_file_path_list)
    print(save_file_path)
    print(select_directory)
    #
    showinfo(title = "提示",
              message = "程序已运行结束!")
    #
    ##
    app.destroy() #关闭GUI窗口,释放资源

python的tk如何设置输入框文字 tkinter输入对话框_输入框_13