Advertisement

【python学习总结1】Tkinter学习总结

阅读量:

Tkinter的各种控件的介绍、语法格式、属性说明、常见方法:

相关资源库[Tkinter是什么](https://www.bianch```net/tkint```er/wha```t-is-tki```nter-h```tm``l "Tkinter是(biansheng g ```net))

相关资源库[Tkinter是什么](https://www.bianch```net/tkint```er/wha```t-is-tki```nter-h```tm``l "Tkinter是(biansheng g ```net))

python tkinter可以使用的颜色

可参考文章

<>

messagebox消息对话框

在tkinter中有三种标准对话框:messagebox、filedialog、colorchooser。

三种消息框:

1、消息提示框 showinfo(title, message, options)

2、消息警告框 showwarning(title, message, options)

3、错误消息框 showerror(title, message, options)

五种对话框:

1、询问确认对话框 askquestion(title, message, options)

2、确认/取消对话框 askokcancel(title, message, options)

3、是/否对话框 askyesno(title, message, options)

4、重试/取消对话框 askretrycancel(title, message, options)

5、是/否/取消对话框 askyesnocancel(title, message, options)

参数 用法
title 设置消息对话框的标题文本
message 设置消息对话框的主要文本内容,可用’\n’实现换行
default 1. 设置默认的按钮(也就是按下回车响应的那个按钮);2. 默认是第一个按钮(像“确定”,“是”或“重试”);3. 可以设置的值根据对话框函数的不同可以选择:CANCEL,IGNORE,OK,NO,RETRY 或 YES
icon 1. 指定对话框显示的图标;2. 可以指定的值有:ERROR,INFO,QUESTION 或 WARNING;3. 注意:不能指定自己的图标
parent 1. 如果不指定该选项,那么对话框默认显示在根窗口上;2. 如果想要将对话框显示在子窗口 w 上,那么可以设置 parent=w

调用showerror()、showinfo()和showwarning()均会返回'ok'。其中错误信息会显示在屏幕上。

askquestion() 返回“yes”或“no”字符串表示用户点击了“是”或“否”按钮;

askokcancel()、askretrycancel() 和 askyesno() 返回布尔类型的值:当用户点击确认选项时,则返回True;当用户选择放弃选项时,则返回False。

例:

复制代码
 from tkinter import *

    
 import tkinter.messagebox
    
  
    
 response = requests.post(url=url, data=json.dumps(payload), headers=headers)
    
 if response.status_code != 200:
    
     txt = tkinter.messagebox.showerror(title="提示", message="更新版本信息失败,请检查!")
    
 txt = tkinter.messagebox.showinfo(title="提示", message="更新版本信息成功!")
    
    
    
    
    python

自己练习的示例:

示例1:

复制代码
 # -*- coding:UTF-8 -*-

    
 from tkinter import *
    
 import tkinter.messagebox
    
 import tkinter.ttk as ttk
    
 from PIL import Image,ImageTk,ImageSequence
    
 import time
    
 import requests
    
 import json
    
  
    
  
    
 if __name__=="__main__":
    
     root=Tk()
    
     root.title("APP版本升级配置工具")
    
  
    
     #第一步:选择环境
    
     label1=Label(root,text="1.请选择环境:",font =('微软雅黑',13,"bold"),fg = 'black',width = 12, height = 2,anchor=W)
    
     label1.grid(row=0,column=0,padx = 0,pady = 0)
    
     #新建1个整型变量,来表示中国、美西、欧洲、英国四个环境哪个被勾选
    
     radio_var1 = IntVar()
    
     #设置4个单选框控件,使用variable参数来接收变量
    
     radio1 = Radiobutton(root, text='中国', font =('微软雅黑',13), fg = 'black', width = 8, height = 2,anchor=W,value=1,variable = radio_var1)
    
     radio2 = Radiobutton(root, text='美西', font=('微软雅黑', 13), fg='black', width = 8, height = 2,anchor=W,value=2,variable = radio_var1)
    
     radio3 = Radiobutton(root, text='欧洲', font=('微软雅黑', 13), fg='black', width = 8, height = 2,anchor=W,value=3,variable = radio_var1)
    
     radio4 = Radiobutton(root, text='英国', font=('微软雅黑', 13), fg='black', width = 8, height = 2,anchor=W,value=4,variable = radio_var1)
    
     radio1.grid(row=0,column=1,padx = 0,pady = 0)
    
     radio2.grid(row=0,column=2,padx = 0,pady = 0)
    
     radio3.grid(row=0,column=3,padx = 0,pady = 0)
    
     radio4.grid(row=0, column=4, padx=0, pady=0)
    
  
    
     #第二步:选择平台
    
     label2 = Label(root, text="2.请选择平台:", font=('微软雅黑', 13, "bold"), fg='black', width=12, height=2, anchor=W)
    
     label2.grid(row=1, column=0, padx=0, pady=0)
    
     # 新建1个整型变量,来表示android、ios哪个被勾选
    
     radio_var2 = IntVar()
    
     # 设置2个单选框控件,使用variable参数来接收变量
    
     radio5 = Radiobutton(root, text='Android', font=('微软雅黑', 13), fg='black', width=8, height=2, anchor=W, value=1,
    
                      variable=radio_var2)
    
     radio6 = Radiobutton(root, text='IOS', font=('微软雅黑', 13), fg='black', width=8, height=2, anchor=W, value=2,
    
                      variable=radio_var2)
    
     radio5.grid(row=1, column=1, padx=0, pady=0)
    
     radio6.grid(row=1, column=2, padx=0, pady=0)
    
  
    
     #第三步:新建版本配置信息:APP Name、Version、Min Version、AppStore、Type、Scope、Description等
    
     label3 = Label(root, text="3.输入配置信息:", font=('微软雅黑', 13, "bold"), fg='black', width=12, height=2, anchor=W)
    
     label3.grid(row=2, column=0,padx=0, pady=0)
    
     # 输入APP Name
    
     label4 = Label(root, text="*APP Name:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label4.grid(row=3, column=0, padx=0, pady=0)
    
     app_name = Variable()
    
     entry_app_name = Entry(root, textvariable=app_name, bd=3, width=20, justify=LEFT)
    
     entry_app_name.grid(row=3, column=1, columnspan=1, padx=0, pady=0)
    
     # 输入APPID
    
     label5 = Label(root, text="*APPID:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label5.grid(row=3, column=2, padx=0, pady=0)
    
     app_id = Variable()
    
     entry_app_id = Entry(root, textvariable=app_id, bd=3, width=20, justify=LEFT)
    
     entry_app_id.grid(row=3, column=3, columnspan=1, padx=0, pady=0)
    
     # 输入Version
    
     label6 = Label(root, text="Version:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label6.grid(row=4, column=0, padx=0, pady=0)
    
     app_version = Variable()
    
     entry_app_version = Entry(root, textvariable=app_version, bd=3, width=20, justify=LEFT)
    
     entry_app_version.grid(row=4, column=1, columnspan=1, padx=0, pady=0)
    
     # 输入Min Version
    
     label7 = Label(root, text="Min Version:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label7.grid(row=4, column=2, padx=0, pady=0)
    
     app_min_version = Variable()
    
     entry_app_min_version = Entry(root, textvariable=app_min_version, bd=3, width=20, justify=LEFT)
    
     entry_app_min_version.grid(row=4, column=3, columnspan=1, padx=0, pady=0)
    
     # 输入Description
    
     label8 = Label(root, text="Description:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label8.grid(row=5, column=0, padx=0, pady=0)
    
     app_description = Variable()
    
     entry_app_name = Entry(root, textvariable=app_description, bd=3, width=20, justify=LEFT)
    
     entry_app_name.grid(row=5, column=1, columnspan=1, padx=0, pady=0)
    
     # 选择Scope,默认选中FullRelease,创建下拉菜单
    
     label9 = Label(root, text="Scope:", font=('微软雅黑', 13), fg='black', width=13, height=2)
    
     label9.grid(row=5, column=2, padx=0, pady=0)
    
     cbox = ttk.Combobox(root,width=18, justify=LEFT)
    
     cbox.grid(row=5, column=3,)
    
     cbox['value'] = ('Full release', 'Whitelist release')
    
     cbox.current(0)
    
     #安卓版本配置,需上传升级包,IOS版本配置,需输入AppStore链接
    
     label10 = Label(root, text="APK/AppStore路径:", font=('微软雅黑', 13), fg='black', width=15, height=2)
    
     label10.grid(row=6, column=0, padx=0, pady=0)
    
     app_apk = Variable()
    
     entry_app_apk = Entry(root, textvariable=app_apk, bd=3, width=40, justify=LEFT)
    
     entry_app_apk.grid(row=6, column=1, columnspan=2, padx=0, pady=0)
    
  
    
     #第四步:操作:保存配置、上架、下架
    
     env_list = ["中国", "美西", "欧洲", "英国"]
    
     platform_list = ["android", "ios"]
    
     login_base_url_list = ["https://***.cn",
    
                        "http://***.com",
    
                        "https://***.com",
    
                        "https://***.com"]
    
     app_version_manager_base_url_list = ['https://***/api/app-version-manager',
    
                                      'https://***/api/app-version-manager',
    
                                      'https://***/api/app-version-manager',
    
                                      'https://***/api/app-version-manager']
    
     label11 = Label(root, text="4.上/下架操作:", font=('微软雅黑', 13, "bold"), fg='black', width=12, height=2, anchor=W)
    
     label11.grid(row=7, column=0, padx=0, pady=0)
    
     save_btn = Button(root, text='更新配置', fg='black', font=('微软雅黑', 13), width=8, height=1,command = lambda: save_version_config())
    
     save_btn.grid(row=7, column=1)
    
     on_btn = Button(root, text='上架', fg='black', font=('微软雅黑', 13), width=8, height=1,command = lambda: on_and_off("on"))
    
     on_btn.grid(row=7, column=2)
    
     off_btn= Button(root, text='下架', fg='black', font=('微软雅黑', 13), width=8, height=1,command = lambda: on_and_off("off"))
    
     off_btn.grid(row=7, column=3)
    
  
    
     root.mainloop()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/E6iHQ1fUjPGhgoyMnwps4tzO7rVN.png)

示例2:一个窗口设置两个tab

复制代码
 root=Tk()

    
 root.title("...APP版本配置工具")
    
 #root.geometry("600x500-10+10")
    
 tab_main = ttk.Notebook()  # 创建分页栏
    
 tab_main.grid(row=0, column=0, padx=0, pady=0)
    
 tab1 = Frame(tab_main)  # 创建第一页框架
    
 tab1.grid(row=0, column=0, padx=0, pady=0)
    
 tab_main.add(tab1, text='Android版本配置')
    
 tab2 = Frame(tab_main)  # 创建第二页框架
    
 tab2.grid(row=0, column=0, padx=0, pady=0)
    
 tab_main.add(tab2, text='IOS版本配置')
    
 tab_list=[tab1,tab2]
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/H5ohEa0cml4jJu16TGsyzBIPr3L9.png)

示例3:显示动图

复制代码
 if __name__=="__main__":

    
     root=Tk()
    
     root.title("你该休息啦!")
    
     root.geometry("500x90-10+10")
    
     label1=Label(root,text="站起来动一动,喝杯水吧!",font =('Arial Rounded MT Bold',25,"bold"),fg = 'DeepPink', bg = 'Gold', width = 20, height = 2)
    
     label1.grid(row=0,column=1,padx = 0,pady = 0)
    
  
    
     canvas1 = Canvas(root, width=85, height=90, bg='white')
    
     canvas1.grid(row=0, column=0, padx=0, pady=0)
    
  
    
     root.after(5000, root.destroy)
    
     while True:
    
     photo1=Image.open("C:/Users/X20232/Desktop/休息提醒/imo1.gif")
    
     iter = ImageSequence.Iterator(photo1)
    
     for frame in iter:
    
         pic = ImageTk.PhotoImage(frame)
    
         canvas1.create_image((45, 48), image=pic)
    
         time.sleep(0.1)
    
         root.update_idletasks()  # 刷新
    
         root.update()
    
  
    
  
    
     root.mainloop()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/fjqverJMHNbRslEhx0StTLgmPn43.png)

示例4:下拉选择框、csv文件读取、写入

复制代码
 # -*- coding:UTF-8 -*-

    
 from tkinter import *
    
 import tkinter.messagebox
    
 import tkinter.ttk as ttk
    
 from PIL import Image,ImageTk,ImageSequence
    
 import time
    
 import requests
    
 import json
    
 import csv
    
 import os
    
  
    
 a*l_token=None
    
 def A*l_login(event):
    
     token=None
    
     env=cbox1.get()
    
     print("env=%s"%env)
    
     if env !='':
    
     login_url="/api/base-uc-app/portal/login"
    
     if env == env_list[0]:
    
         url=login_base_url_list[0]+login_url
    
         account="***"
    
         password="test2021"
    
     if env == env_list[1]:
    
         url = login_base_url_list[1] + login_url
    
         account = "***"
    
         password = "test2021"
    
     if env == env_list[2]:
    
         url = login_base_url_list[2] + login_url
    
         account = "***"
    
         password = "test2021"
    
     if env == env_list[3]:
    
         url = login_base_url_list[3] + login_url
    
         account = "***"
    
         password = "test2021"
    
     headers = {
    
     "Accept": "application/json, text/plain, */*",
    
     "Content-Type": "application/json;charset=UTF-8",}
    
     payload={"password": password, "account": account, "loginFrom": "WEB"}
    
     response = requests.post(url=url,headers=headers,data=json.dumps(payload))
    
     print(response)
    
     if response.status_code != 200:
    
         txt = tkinter.messagebox.showerror(title="提示", message="%s环境登录失败,请检查环境或账号信息!"%var1.get())
    
     print("%s环境登录成功"%var1.get())
    
     token = response.json()['data']['token']
    
     a*l_token=token
    
     print("a*l_token=%s"%token)
    
     return
    
  
    
 def a*l_location_service():
    
     token = a*l_token
    
     env = cbox1.get()
    
     print("env=%s" % env)
    
     if env=='':
    
     txt = tkinter.messagebox.showerror(title="提示", message="A**位置解析请选择环境!")
    
     if csv_entry.get() == '':
    
     txt = tkinter.messagebox.showerror(title="提示", message="请输入设备经纬度信息csv文件路径!")
    
     print(csv_entry.get())
    
     file1=open(csv_entry.get().split("\n")[0],'r')
    
     csv_file=csv.reader(file1)
    
     success = []
    
  
    
     for r in csv_file:
    
     print(r)
    
     if r[0]=="SN":
    
         continue
    
     serial_no=r[0]
    
     latitude=r[1]
    
     longitude=r[2]
    
     location_url = "/api/device/product/bind-gps/"+serial_no
    
     if env == env_list[0]:
    
         url = login_base_url_list[0] + location_url
    
     if env == env_list[1]:
    
         url = login_base_url_list[1] + location_url
    
     if env == env_list[2]:
    
         url = login_base_url_list[2] + location_url
    
     if env == env_list[3]:
    
         url = login_base_url_list[3] + location_url
    
     headers = {
    
             "Accept": "application/json, text/plain, */*",
    
             "Content-Type": "application/json;charset=UTF-8",
    
             "autel-token":token
    
             }
    
     payload = {"lat": float(latitude),
    
                 "lon": float(longitude)
    
                }
    
     response = requests.post(url=url, headers=headers, data=json.dumps(payload))
    
     print(response)
    
     if response.status_code != 200:
    
         print("SN号为%s的设备位置解析失败!"%serial_no)
    
         outcome1.insert(tkinter.END, ('SN%s,返回码:%d'%(serial_no,response.status_code)))
    
         outcome1.insert(tkinter.END, '\n')
    
     else:
    
         print("SN号为%s的设备位置解析成功!"%serial_no)
    
         country = response.json()['data']['country']
    
         level_1 = response.json()['data']['level_1']
    
         level_2 = response.json()['data']['level_2']
    
         level_3 = response.json()['data']['level_3']
    
         outcome1.insert(tkinter.END, ('SN:%s,country:%s,level_1:%s,level_2:%s,level_3:%s'%(serial_no,country,level_1,level_2,level_3)))
    
         outcome1.insert(tkinter.END, '\n')
    
         success.append([serial_no, country, level_1, level_2,level_3])
    
     file1.close()
    
     print("解析完成,将结果写入csv文件中")
    
     outcome_file_path = os.path.dirname(csv_entry.get()) + '\ A**位置解析结果.csv'
    
     print(outcome_file_path)
    
     file2 = open(outcome_file_path, 'w', newline="")
    
     outcome_file = csv.writer(file2)
    
     outcome_file.writerow(["SN", "country", "level_1", "level_2","level_3"])
    
     for s in success:
    
     outcome_file.writerow([s])
    
     file2.close()
    
     return
    
  
    
  
    
 def tencent_location_service():
    
     if csv_entry.get() == '':
    
     txt = tkinter.messagebox.showerror(title="提示", message="请输入设备经纬度信息csv文件路径!")
    
     print(csv_entry.get())
    
     file1 = open(csv_entry.get().split("\n")[0], 'r')
    
     csv_file = csv.reader(file1)
    
     success=[]
    
     i=1
    
     for r in csv_file:
    
     print(r)
    
     if r[0]=="SN":
    
         continue
    
     serial_no = r[0]
    
     latitude = r[1]
    
     longitude = r[2]
    
     location_url = "https://apis.map.qq.com/ws/geocoder/v1?key=5Q5BZ-5EVWJ-SN5F3-K6QBZ-B3FAO-RVBWM&location="+str(latitude)+","+str(longitude)+"&sig=90da272bfa19122547298e2b0bcc0e50"
    
     headers = {
    
         "Accept": "application/json, text/plain, */*",
    
         "Content-Type": "application/json;charset=UTF-8",
    
     }
    
     response = requests.get(url=location_url, headers=headers)
    
     print(response)
    
     if response.status_code != 200:
    
         print("SN号为%s的设备位置解析失败!" % serial_no)
    
         outcome2.insert(tkinter.END, ('SN%s,返回码:%d' % (serial_no, response.status_code)))
    
         outcome2.insert(tkinter.END, '\n')
    
     else:
    
         print("SN号为%s的设备位置解析成功!" % serial_no)
    
         print(response.json())
    
         country = response.json()["result"]['address_component']["nation"]
    
         print("22",country)
    
         if (response.json()["result"]['address_component']).__contains__("province") is True:
    
             province = response.json()['result']['address_component']["province"]
    
             city = response.json()['result']['address_component']["city"]
    
             county = response.json()['result']['address_component']["district"]
    
         else:
    
             province = response.json()['result']['address_component']["ad_level_1"]
    
             city = response.json()['result']['address_component']["ad_level_2"]
    
             county = response.json()['result']['address_component']["ad_level_3"]
    
         outcome2.insert(tkinter.END, ('SN:%s,country:%s,province:%s,city:%s,county:%s' % (serial_no, country, province, city,county)))
    
         outcome2.insert(tkinter.END,'\n')
    
         success.append([serial_no, country, province, city, county])
    
         i+=1
    
         #腾讯位置解析接口一个key每秒请求量只有10个
    
         if i%10==0:
    
             time.sleep(1)
    
  
    
     file1.close()
    
     print("解析完成,将结果写入csv文件中")
    
     outcome_file_path = os.path.dirname(csv_entry.get()) + '\ 腾讯位置解析结果.csv'
    
     print(outcome_file_path)
    
     file2=open(outcome_file_path, 'w', newline="")
    
     outcome_file = csv.writer(file2)
    
     outcome_file.writerow(["SN", "country", "province", "city", "county"])
    
     for s in success:
    
     outcome_file.writerow([s])
    
     file2.close()
    
     return
    
  
    
 if __name__=="__main__":
    
     root=Tk()
    
     root.title("根据经纬度查询位置工具")
    
     root.geometry("590x430-10+10")
    
  
    
     #第一步:A**l位置解析需选择环境
    
     label1=Label(root,text="A**位置解析请选择环境:",font =('微软雅黑',11),fg = 'black',width = 22, height = 2,anchor=W)
    
     label1.grid(row=0,column=0,padx = 0,pady = 0)
    
     #创建一个变量,用来表示中国、美西、欧洲、英国哪个环境被选择
    
     var1=tkinter.StringVar()
    
     #创建下拉菜单,包含中国、美西、欧洲、英国四个环境
    
     cbox1=ttk.Combobox(root,textvariable=var1,width=15,justify=LEFT)
    
     # 设置下拉菜单中的值
    
     cbox1['value'] = ('中国', '美西', '欧洲', '英国')
    
     # 绑定下拉菜单事件
    
     env_list = ["中国", "美西", "欧洲", "英国"]
    
     login_base_url_list = ["https://***.cn",
    
                        "https://***.com",
    
                        "https://***.com",
    
                        "https://***.com"]
    
     cbox1.bind("<<ComboboxSelected>>", A**l_login)
    
     cbox1.grid(row=0, column=1, padx=0, pady=0)
    
     #第二步:输入设备经纬度信息csv文件路径
    
     label2 = Label(root, text="设备经纬度csv文件路径:", font=('微软雅黑',11), fg='black', width=22, height=2,anchor=W)
    
     label2.grid(row=1, column=0, padx=0, pady=0)
    
     var2= Variable()
    
     csv_entry = Entry(root, textvariable=var2, bd=3, width=38, justify=LEFT)
    
     csv_entry.grid(row=1, column=1,  columnspan=2,padx=0, pady=0,sticky = W)
    
     #第三步:点击按钮执行A**位置解析或腾讯位置解析,以及数据导出按钮
    
     autel_btn = Button(root, text='A**位置解析', fg='black', font=('微软雅黑', 11), width=12, height=1, command=lambda: a*l_location_service())
    
     autel_btn.grid(row=2, column=0)
    
     tencent_btn = Button(root, text='腾讯位置解析', fg='black', font=('微软雅黑', 11), width=12, height=1,command=lambda: tencent_location_service())
    
     tencent_btn.grid(row=2, column=2)
    
     #第四步:解析结果展示
    
     outcome1= Text(root, height=20, width=35)
    
     outcome1.grid(row=3, column=0,columnspan=2,sticky = W)
    
     outcome2 = Text(root, height=20, width=35)
    
     outcome2.grid(row=3, column=2,columnspan=2,sticky = W)
    
     label4 = Label(root, text="A**解析结果展示", font=('微软雅黑', 8), fg='black', width=22, height=2)
    
     label4.grid(row=4, column=0, padx=0, pady=0)
    
     label5 = Label(root, text="腾讯解析结果展示", font=('微软雅黑', 8), fg='black', width=22, height=2)
    
     label5.grid(row=4, column=2, padx=0, pady=0)
    
  
    
  
    
     root.mainloop()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/jr3NPFcQfZMO2xITX0l1K6he9p7L.png)

全部评论 (0)

还没有任何评论哟~