精华内容
下载资源
问答
  • Tkinter实例应用1

    2018-10-17 20:13:27
    import tkinter as tk app=tk.Tk() app.title('FishC Demo!') theLabel=tk.Label(app,text='我的第二个窗口程序!') theLabel.pack() #pack用于自动调节组件自身的尺寸 app.mainloop() #mainloop是进入主事件循环 ...

    实例1:

    import tkinter as tk

    app=tk.Tk()
    app.title('FishC Demo!')

    theLabel=tk.Label(app,text='我的第二个窗口程序!')
    theLabel.pack()
    #pack用于自动调节组件自身的尺寸
    app.mainloop()
    #mainloop是进入主事件循环

    运行结果:

    实例2:

    运行结果:

     

    强化一步:

    运行结果:

    展开全文
  • 分类目录——tkinter 先看效果 Radiobutton使用 var1 = tk.StringVar() var1.set('B') # 设置哪一个被默认选中,如果设置值不在可选项中,则全不被选中 r1 = tk.Radiobutton(window, text='Option A',variable=var1...
  • 这篇文章主要介绍了python tkinter canvas使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 注:在使用 create_arc 绘制弧时,和 create_oval 的用法...
  • 本文旨在抛砖引玉,以实例的开发过程,让读者完整的了解程序开发各个环节。 实例项目的效果及功能简介 实例项目的效果及功能简介 1、自动拉取百度知道,个人中心的待回答问题列表。并且在发现有新问题的时候...

    写在开始:

    很多程序设计入门的新手,语法学习了很久、代码也敲了不少、各种模块也有接触,但要开发一个具体的项目,还是无从下手。
    本文旨在抛砖引玉,以实例的开发过程,让读者完整的了解程序开发。

    在这里插入图片描述

    展开全文
  • Canvas应用实例 canvas = tk.Canvas(window, bg='blue', height=100, width=200) # 注意:tkinter中的坐标系左上角为原点,向右为x轴正向,向下为y轴正向 # 在canvas(画布)上放张图片 image_file = tk.PhotoImage...
  • 使用Tkinter模块来创建简单的GUI程序。 Tkinter的Widgets有:Button、Canvas、Checkbutton、Entry、Frame、Label、Listbox、Menu、Menubutton、Message、Radiobutton、Scales、Scrollbar、TEXT、Toplevel等。 例: ...
  • Tkinter界面编程案例(简单) 文章目录Tkinter界面编程案例(简单)一、基本写法框架1、def _ _init_ _(self):2、self._ create_body_()3、def _ set_window_(self)二、Tk(根窗口)和 Toplevel(顶级窗口)的方法...

    Tkinter界面编程案例(简单)


    一、基本写法框架

    class LogTool(Tk):
        def __init__(self):
            super().__init__()
            self._set_window_()
            self._create_menu_bar_()
            self._create_body_()
        # 设置初始窗口的属性
        def _set_window_(self):
            pass
    
    if "__main__" == __name__:
        app = LogTool()
        app.mainloop()
    

    1、def _ init _(self):

    Python中__init__和self的意义和作用

    1. init:构造函数,用来初始化,写法固定
    2. init()方法,在创建一个对象时默认被调用,不需要手动调用
    3. 形式1:def_init_(self)
    4. 形式2:def_init_(self, 参数1,参数2,···,参数n)

    2、self._ create_body_()

    1. _用一个下划线代表“假私有变量”,加此下划线可以解决pycharm报警问题
    2. 在init函数中调用,即类初始化时就被调用,不用再手动调用。

    3、def _ set_window_(self)

    和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。

    二、Tk(根窗口)和 Toplevel(顶级窗口)的方法汇总

        # 设置初始窗口的属性
        def _set_window_(self):
            self.title("LogTool")
            scn_width, scn_height = self.maxsize()
            wm_val = '1000x618+%d+%d' % ((scn_width - 1000) / 2, (scn_height - 618) / 2)
            self.geometry(wm_val)
            # 窗口图标()
            self.protocol('WM_DELETE_WINDOW', self.exit_LogTool)
    
        def exit_LogTool(self):
            if messagebox.askokcancel("退出?", "确定退出吗?"):
                self.destroy()
    

    Tk(根窗口)和 Toplevel(顶级窗口)的方法汇总

    python中tkinter窗口位置\坐标\大小等知识的科普

    1、常见设置函数

    1. self.title()
    2. self.maxsize()
    3. self.geometry()

    2、self.protocol()

    tkinter-protocol-创建销毁窗口

    除事件绑定外,Tkinter还支持一种称为协议(protocol-)处理程序的机制。 协议是指应用程序与窗口管理器之间的交互。 最常用的协议称为
    WM_DELETE_WINDOW
    用于定义当用户使用窗口管理器显式关闭窗口时发生的情况。可以使用协议方法来为此协议安装处理程序(小部件必须是根或顶级插件):

    widget.protocol("WM_DELETE_WINDOW", handler)
    

    一旦定义了自己的处理程序handler,Tkinter将不再自动关闭窗口。 相反,可以如显示一个消息框,询问用户是否应保存当前数据,或者在某些情况下,只需忽略请求即可。 要从此处理程序关闭窗口,只需调用窗口的destroy方法。

    三、Menu(菜单)widget

        def _create_menu_bar_(self):
            # 创建菜单组件
            menu_bar = Menu(self)
            # 创建文件菜单及联级菜单
            file_menu = Menu(menu_bar, tearoff=0)
            file_menu.add_command(label='打开', accelerator='Ctrl+O', command=self.open_file)
            file_menu.add_command(label='保存', accelerator='Ctrl+S', command=self.save)
            # 创建超级模式开始
            file_menu.add_command(label='超级模式', command=self.super_mode)
            # 创建超级模式结束
            file_menu.add_separator()   # 添加一条分割线
            file_menu.add_command(label='退出', accelerator='Alt+F4', command=self.exit_LogTool)
            menu_bar.add_cascade(label='文件', menu=file_menu)    # 添加文件菜单和关联联级菜单
    
            self["menu"] = menu_bar     # 相当于放置菜单组件到根窗口
    

    Menu组件详情

    1. Menu(菜单)组件用于实现顶级菜单、下拉菜单和弹出菜单。
    2. Menu 组件通常被用于实现应用程序上的各种菜单,由于该组件是底层代码实现,所以不建议你自行通过按钮和其他组件来实现菜单功能。
    3. 创建一个顶级菜单,你需要先创建一个菜单实例,然后使用 add() 方法将命令和其它子菜单添加进去。

    1、顶级菜单

    创建一个顶级菜单,你需要先创建一个菜单实例,然后使用 add() 方法将命令和其它子菜单添加进去:

    file_menu.add_command(label='打开', accelerator='Ctrl+O', command=self.open_file)
    

    2、下拉菜单

    创建一个下拉菜单(或者其他子菜单),方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上):

     menu_bar.add_cascade(label='文件', menu=file_menu)    # cascade 联级的
    

    3、弹出菜单

     menu.post(event.x_root, event.y_root)
    

    4、root[“menu”]

     root["menu"]= menu_bar  # 等价于 root.config(menu=menu_bar)
    

    5、config作用

    tkinter通过config配置样式
    一般情况下,config用来配置tkinter中控件和字体的样式,比如颜色、大小等。

    四、command与bind绑定事件

    1、command绑定事件

    command 绑定事件处理方法简单的事件处理可通过 command 选项来绑定,该选项绑定为一个函数或方法,当用户单击指定按钮时,通过该 command 选项绑定的函数或方法就会被触发。

    2、bind绑定事件

    为了弥补command的不足,Python 提供了更灵活的事件绑定方式,所有 Widget 组件都提供了一个bind() 方法,该方法可以为“任意” 事件绑定事件处理方法。

    事件绑定

    widget.bind(event, handler)
    

    五、Scrollbar(滚动条)widget

    Scrollbar组件

    Tkinter 组件详解之Scrollbar
    Scrollbar(滚动条)组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条。Scrollbar 组件常常被用于实现文本、画布和列表框的滚动。
    何时使用 Scrollbar 组件?
    Scrollbar 组件通常几乎与 Text 组件、Canvas 组件和 Listbox 组件一起使用,水平滚动条还能跟 Entry 组件配合。
    用法
    下边例子我们演示如何使用垂直滚动条。为了在某个组件上安装垂直滚动条,你需要做两件事:

    1. 设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法;
    2. 设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法。

    案例1:

    # 创建滚动条
    scroll_bar1 = Scrollbar(self.content_text)
    # 利用该形式,方便command的复用,即后续的事件绑定
    scroll_bar1["command"] = self.content_text.yview
    self.content_text["yscrollcommand"] = scroll_bar1.set
    scroll_bar1.pack(side='right', fill='y')
    

    案例2:

    # 滚动条占位
    self.frame1 = Frame(self.bodywindow_frame, width=16)
    self.frame1.pack(side=RIGHT, expand='no', fill=Y)
    self.frame2 = Frame(self.bodywindow_frame, height=16)
    self.frame2.pack(side=BOTTOM, expand='no', fill=X)
    
    # 滚轮控件
    self.vscrollbar = ttk.Scrollbar(self.frame1, orient='vertical')
    self.vscrollbar.pack(expand='yes', fill='y')
    self.hscrollbar = ttk.Scrollbar(self.frame2, orient='horizontal')
    self.hscrollbar.pack(expand='yes', fill='x')
    
    # 绑定滚轮跟treeview表格控件
    self.tree.configure(yscrollcommand=self.vscrollbar.set)
    self.vscrollbar.configure(command=self.tree.yview)
    self.tree.configure(xscrollcommand=self.hscrollbar.set)
    self.hscrollbar.configure(command=self.tree.xview)
    

    1、创建滚动条组件容器(针对布局较复杂时)

    这样可以避免滚动条组件遮挡被绑定组件内容,方便布局。

            # 滚动条占位
            self.frame1 = Frame(self.bodywindow_frame, width=16)
            self.frame1.pack(side=RIGHT, expand='no', fill=Y)
            self.frame2 = Frame(self.bodywindow_frame, height=16)
            self.frame2.pack(side=BOTTOM, expand='no', fill=X)
    

    2、创建滚动条组件

    将滚动条组件放置在指定父组件内,此时为frame“占位”容器内。

            # 滚轮控件
            self.vscrollbar = ttk.Scrollbar(self.frame1, orient='vertical')
            self.vscrollbar.pack(expand='yes', fill='y')
            self.hscrollbar = ttk.Scrollbar(self.frame2, orient='horizontal')
            self.hscrollbar.pack(expand='yes', fill='x')
    

    3、绑定滚动条与对应组件

            # 绑定滚轮跟treeview表格控件
            self.tree.configure(yscrollcommand=self.vscrollbar.set)
            self.vscrollbar.configure(command=self.tree.yview)
            self.tree.configure(xscrollcommand=self.hscrollbar.set)
            self.hscrollbar.configure(command=self.tree.xview)
    
    1. 设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法。
    2. 设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法。
    3. 采用案例1和案例2的写法均可。

    六、Tk中的lambda函数

    1. 用command绑定函数的时候是不可以传参的,如果想要传参,那么就用lambda表达式。
      lambda与command
    2. 用bind函数只接受方法类型的参数,可以用lambda表达式。
      lambda与bind
        self.sendButton.bind('<Button-1>', lambda event, msgQueue=self.msgQueue: self.sendButtonAction(event, msgQueue))
    

    实际运用案例

    Button(search_toplevel, text="查找", command=
    lambda:self.search_result(search_entry_widget.get(),search_toplevel, search_entry_widget) 
    ).grid(row=0, column=2, sticky='e' + 'w', padx=2, pady=2)
    
        def search_result(self, key, search_toplevel, search_box):
            self.content_text.tag_remove('match', '1.0', 'end')
            matches_found = 0
            if key:
                start_pos = '1.0'
                while True:
                    start_pos = self.content_text.search(key, start_pos, stopindex="end")
                    if not start_pos:
                        break
                    end_pos = '{} + {}c'.format(start_pos, len(key))
                    self.content_text.tag_add('match', start_pos, end_pos)
                    matches_found += 1
                    start_pos = end_pos
                self.content_text.tag_config('match', foreground='red', background='yellow')
            search_box.focus_set()
            search_toplevel.title('发现%d个匹配的' % matches_found)
    

    七、Text(文本)widget

    Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编辑器和网页浏览器使用。
    text组件详细介绍
    案例:

        def super_mode(self):
            root_dir = filedialog.askdirectory()    # 调用文件夹对话框,选择文件目录的操作
            
            self.content_text.config(state = 'normal')
            self.content_text.delete(1.0, END)
            self.result_text.config(state = 'normal')
            self.result_text.delete(1.0, END)
            
            file_count = 0 # 文件夹个数初始化
        
            for file in os.listdir(root_dir):
                if "data_logfile.log" in file:
                    file_name = root_dir + "\\" + file
                    filein = open(file_name , "r")
                    file_count += 1 # 文件处理计数
                    count_81 = 0    # 漂移告警计数初始值
                    self.result_text.insert('end', file)     # 输出此时对应的文件名
                    self.result_text.insert('end', '\n')
                    for line in filein:
                        if 'Adr:033' in line:    # 标准漂移代码为033,测试程序代码可改为032
                            if 'Data:81' in line:
                                dictcode = self.acs2000_code(line)
                                messagecode = "故障磁头:{dictcode[Trackinfo]:<10}故障代码:{dictcode[Data]:<10}通道:{dictcode[Adr]}-{dictcode[Label]:<34}漂移发生时间:{dictcode[Date]}-{dictcode[Time]}".format(dictcode = dictcode)
                                self.result_text.insert('end', messagecode)
                                count_81 += 1
                    sumdrift = '电流漂移告警共计: %d 次' % count_81
                    self.result_text.insert('end', sumdrift)
                    self.result_text.insert('end', '\n')
                    self.result_text.insert('end', '==================================================================================================================================')
                    self.result_text.insert('end', '\n')
                    filein.close()
                else:
                    continue
            if file_count == 0:
                self.content_text.insert('end', "文件夹选择错误,未找到 logfile.log 文件 ")
            else:
                file_count_display = "现在处于超级模式!共计处理:{} 个文件".format(file_count)
                self.content_text.insert('end', file_count_display)
            self.content_text.config(state = 'disabled')
            self.result_text.config(state = 'disabled')
    
    1. 将 state 选项从默认的 “normal” 修改为 “disabled”,使得 Text 组件中的内容为“只读”形式。不过需要注意的是,当你需要进行任何修改的时候,记得将 state 选项改回 “normal”,否则 insert() 和 delete() 方法都会失效。
            self.content_text.config(state = 'normal')
    
            self.content_text.config(state = 'disabled')
    
    1. 使用组件前先对内容进行清空
            self.content_text.delete(1.0, END)
    
    1. 当你创建一个 Text 组件的时候,它里边是没有内容的。为了给其插入内容,你可以使用 insert() 方法以及“current”、 “insert” 或 “end” 索引——Indexes(索引)是用来指向 Text 组件中文本的位置。
           	self.content_text.insert('end', "文件夹选择错误,未找到 logfile.log 文件 ")
    
    展开全文
  • python Tkinter使用案例

    万次阅读 多人点赞 2017-09-23 21:38:52
    用具体的实例讲解Tkinter使用: 用上下左右方向键以及回车对红色方格做出相应的移动 # -*- coding: utf-8 -*- from Tkinter import * def main(): #创建tk对象 tk=Tk() #创建画布 canvas=Canvas(tk,...

    python Tkinter是内置的库,无需安装

     

    用具体的实例讲解Tkinter库使用:

    用上下左右方向键以及回车对红色方格做出相应的移动

     

    # -*- coding: utf-8 -*-
    from Tkinter import *
    
    
    def main():
        #创建tk对象
        tk=Tk()
        #创建画布
        canvas=Canvas(tk,width=400,height=400)
        canvas.pack()
        #在画布上创建文字
        canvas.create_text(200,40,text="welcome to Tkinter",fill="blue",font=("Times",16))
        #在画布上创建图片,tkinter只能显示gif文件
        myImage=PhotoImage(file="timg.gif")
        canvas.create_image(10,70,anchor=NW,image=myImage)#以(10,70)为西北角显示图像
    
        #move中的第一个参数表示移动canvas里的第几个对象
        def moverectangle(event):
            if event.keysym == "Up":
                canvas.move(3,0,-5)
            elif event.keysym=="Down":
                canvas.move(3,0,5)
            elif event.keysym=="Left":
                canvas.move(3,-5,0)
            elif event.keysym=="Right":
                canvas.move(3,5,0)
            else:
                canvas.move(3,5,5)
    
        canvas.create_rectangle(200,200,220,220,fill="red")
        #让tkinter监视KeyPress事件,当该事件发生时调用moverectangle函数
        #bind_all第2个参数是回调函数,不能接收参数传递,所以在函数内部建立回调函数
        canvas.bind_all("<KeyPress-Up>",moverectangle)
        canvas.bind_all("<KeyPress-Down>", moverectangle)
        canvas.bind_all("<KeyPress-Left>",moverectangle)
        canvas.bind_all("<KeyPress-Right>", moverectangle)
        canvas.bind_all("<KeyPress-Return>",moverectangle)
    
        tk.mainloop()
    main()

     

     

     

    实例2:利用Tkinter库创建聊天界面

     

     

    # -*- coding: utf-8 -*-
    from Tkinter import *
    from time import *
    
    def main():
    
        def sendMsg():
            strtime="我:"+strftime("%Y-%m-%d %H:%M:%S",localtime())+"\n"
            txtMsgList.insert(END,strtime,'greencolor')
            #0.0是0行0列到END,表示全部,END表示插入末端
            txtMsgList.insert(END,txtMsg.get('0.0',END))
            txtMsg.delete('0.0',END)
    
        def cancelMsg():
            txtMsg.delete('0.0',END)
    
        def sendMsgEvent(event):
            if event.keysym=="Return":
                sendMsg()
        tk=Tk()
        tk.title("python聊天室")
        # 创建frame容器
        frameLT = Frame(width=500, height=320)
        frameLC = Frame(width=500, height=150,bg="red")
        frameLB = Frame(width=500, height=30)
        frameRT = Frame(width=200, height=500)
    
        #创建控件
        txtMsgList=Text(frameLT)
        #配置标签tag的属性,第一个参数为tag名字,第2个参数为前景色,背景色为默认白色
        txtMsgList.tag_config("greencolor", foreground='#008C00')
        txtMsg=Text(frameLC)
        txtMsg.bind_all("<KeyPress-Return>",sendMsgEvent)
        btnSend=Button(frameLB,text="send",width=8,command=sendMsg)
        btnCancel=Button(frameLB,text="cancel",width=8,command=cancelMsg)
        myImage=PhotoImage(file="python.gif")
        label=Label(frameRT,image=myImage)
    
        #窗体布局
        frameLT.grid(row=0, column=0, columnspan=2,padx=1,pady=5)
        frameLC.grid(row=1, column=0, columnspan=2)
        frameLB.grid(row=2, column=0, columnspan=2)
        frameRT.grid(row=0, column=2, rowspan=3,padx=5,pady=4)
    
        # 固定大小
        frameLT.grid_propagate(0)
        frameLC.grid_propagate(0)
        frameLB.grid_propagate(0)
        frameRT.grid_propagate(0)
    
        #控件布局
        btnSend.grid(row=2, column=0)
        btnCancel.grid(row=2, column=1)
        label.grid()
        txtMsgList.grid()
        txtMsg.grid()
    
        #主事件循环
        tk.mainloop()
    main()

     

     

     

    展开全文
  • Python—tkinter编程案例

    千次阅读 2019-02-08 14:46:59
    Python—tkinter编程案例 用户登录界面无处不在,例如电子邮箱、QQ、微信等等,这时Python-tkinter库提供了强大的跨平台图形用户界面编程的功能。下面就是一个简单的tkinter库编写的模拟用户登录界面。 首先导入标准...
  • Python 图形界面 Tkinter 入门案例

    千次阅读 2018-07-04 14:50:21
    import tkinter.messagebox as messagebox from tkinter import * from tkinter import ttk from tkinter.filedialog import askdirectory从Frame派生一个Application类,这是所有Widget的父容器:class Application...
  • 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下。 闲话不说,直奔主题。建议大家跟着敲一遍代码,体会一下代码复用、字符串方法的运用和动态创建组件的妙处,然后在这个框架的基础...
  • Checkbutton使用实例 var1 = tk.IntVar() var1.set(1) # 如果设置值是onvalue的值,就默认选中;如果设置值是offvalue或者非on非off的值,就默认不选中 var2 = tk.IntVar() c1 = tk.Checkbutton(window, text='...
  • Python实验十(tkinter编程实例)

    千次阅读 2020-05-20 14:49:31
    1.使用tkinter实现计算器程序。实现效果如下 import re import tkinter import tkinter.messagebox root = tkinter.Tk() #设置窗口大小和位置 root.geometry('300x270+400+100') #不允许改变窗口的大小 root....
  • Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中.
  • 参考链接:tkinter book font字体的参数有如下6个 family: 字体类别,如’Fixdsys’ size: 作为一个整数,以点字体的高度。为了获得字体的n个像素高,使用-n. weight: “BOLD” 表示加粗, “NORMAL” 表示正常大小,...
  • 正在尝试着做一个比较完善的画图软件,计划使用tkinter库中的canvas控件来做,目前终于可以拿出来和大家见面了。 不忘初心,方得始终,让我们一起共勉! 好的,言归正传,下面我将详细介绍整个项目的建设过程。 先说...
  • Entry极简实例 from tkinter import * root = Tk() Entry(root, text='input your text here').pack() # text毫无作用 root.mainloop() Entry与变量 from tkinter import * root = Tk() e = StringVar() ...
  • 话不多说,直接上代码: """ @Author xlf @Team occamedu ... @Time 2021/4/16 11:05 """ import tkinter as tk import tkinter.messagebox ...# 第1步,实例化object,建立窗口window from tkinter i
  • 主要介绍了Python基于Tkinter实现的记事本,实例分析了Tkinter实现记事本程序的相关技巧,需要的朋友可以参考下
  • 本文实例讲述了Python基于Tkinter的HelloWorld入门实例。分享给大家供大家参考。具体分析如下: 初学Python,打算做几个Tkinter应用来提高。 刚学的HelloWorld,秀一下。我用Python3.2的,Windows版本的。 源代码...
  • 复制代码 代码如下:import timeimport tkinter as tkclass Window: def __init__(self, title=’nms’, width=300, height=120, staFunc=bool, stoFunc=bool): self.w = width self.h = height self.stat = True...
  • tkinter写的python GUI注册界面实例,包括注册和登录。使用pickle库来序列化用户名和密码
  • 多种案例提供Python图形化编程,上手容易,推荐使用
  • 案例是一个小小的尝试,主要是使用tk窗体和label控件实现简单的时间显示功能,并实时展现当前的最新时间,形成动态的展示效果。 案例使用到的知识和技术点: 1、TK窗体的基础属性配置 2、标签(Label)的基础...
  • 运行结果: 运用了Entry,Button,...from tkinter import messagebox from tkinter.filedialog import * root =Tk() root.title('QR code') textPath = StringVar() videoPath=StringVar() outPath=StringVar...
  • 本文实例讲述了Python实现在tkinter使用matplotlib绘制图形的方法。分享给大家供大家参考,具体如下: 一. 代码: # coding=utf-8 import sys import Tkinter as Tk import matplotlib from numpy import arange,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,097
精华内容 2,438
关键字:

tkinter应用实例