• python图形界面tkinter使用技巧


    一、python图形界面tk之滚动文本框的实现示例

    使用python的tkinter实现滚动文本框的方式,目前我知道的有两种,一种方式是使用frame容器来放置Text控件Scrollbar控件,再将Text控件和Scrollbar控件联动 ;另一种方式则是直接使用tkinter库中的ScrollText控件。

    代码实现

    1.方式一

    直接使用tkinter库中的ScrollText控件实现滚动文本框的功能。
    示例代码:

    from tkinter.scrolledtext import ScrolledText
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("562x402")
        window.resizable(width=False,height=False)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=1, sticky=tk.N + tk.S )
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=2,sticky=tk.N + tk.S + tk.W + tk.E)
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署ScrolledText控件
        deploy_scrolledtext(window)
        # 进入主循环
        window.mainloop()
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    演示效果如下:

    注意跑上述代码的时候不能少了`from tkinter.scrolledtext import ScrolledText`,不然会报`AttributeError: module 'tkinter' has no attribute 'scrolledtext'`这个错。
    2.方式二

    使用frame容器来承载Text控件和Scrollbar控件,再将Text控件与Scrollbar控件联动以实现滚动文本框的功能。
    示例代码:

    import tkinter as tk
    from tkinter.scrolledtext import ScrolledText
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("665x402")
        window.resizable(width=False,height=False)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=1, sticky=tk.N + tk.S )
    
    def deploy_frame(window):
        '''创建一个frame用来放置Text和Scrollbar控件并部署到主窗口'''
        frame = tk.Frame(window)
        # 将Text控件添加进Frame控件
        text = tk.Text(frame,font=("隶书",12),fg="black",bg="misty rose",relief='flat')
        text.pack(side=tk.LEFT)
    
        # 设置y轴的滚动条,并将滚动条与text控件联动
        yscrollbar = tk.Scrollbar(frame)
        yscrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        yscrollbar.config(command=text.yview)
        text.config(yscrollcommand=yscrollbar.set)
        # 将frame部署到主窗口上
        frame.grid(row=1, column=0, columnspan=2, sticky=tk.N + tk.S )
    
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
    	# 创建一个frame用来放置Text和Scrollbar控件并部署到主窗口
        deploy_frame(window)
        # 进入主循环
        window.mainloop()
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    演示效果如下:

    二、python图形界面tk之控件随窗口自变化的实现示例

    控件随窗口自变化的演示代码是基于一、python图形界面tk之滚动文本框的实现方式一代码实现的。既在上面的代码中添加了一个**auto_adapt()**函数。

    def auto_adapt(window):
        '''设置控件与窗口自适应'''
        window.rowconfigure(0, weight=1) # 定义第0行可以自动缩放,缩放比例为100%
        window.rowconfigure(1, weight=1)
        window.columnconfigure(0, weight=1)
        window.columnconfigure(1, weight=1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    rowconfigure中的第一个参数为第几行,第二个参数为缩放比例。
    columnconfigure中的第一个参数为第几列,第二个参数为缩放比例。

    代码实现

    from tkinter.scrolledtext import ScrolledText
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("346x246")
        window.resizable(width=True,height=True)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=1, sticky=tk.N + tk.S)
    
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=2,sticky=tk.N + tk.S + tk.W + tk.E)
    
    
    def auto_adapt(window):
        '''设置控件与窗口自适应'''
        window.rowconfigure(0, weight=1)
        window.rowconfigure(1, weight=1)
        window.columnconfigure(0, weight=1)
        window.columnconfigure(1, weight=1)
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署scrolledtext控件
        deploy_scrolledtext(window)
        # 设置控件与窗口自适应
        auto_adapt(window)
        # 进入主循环
        window.mainloop()
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    演示效果如下:

    三、python图形界面tk之顶部菜单栏实现示例

    顶部菜单栏的演示代码是基于一、python图形界面tk之滚动文本框的实现方式一代码实现的。既在上面的代码中添加了一个**deploy_menu()**函数。

    def deploy_menu(window):
        '''部署顶部菜单'''
        menu = tk.Menu(window)
    
        fmenu = tk.Menu(menu)
        fmenu.add_command(label="打开")
        fmenu.add_command(label="保存")
        
        menu.add_cascade(label="文件",menu=fmenu)
        window.config(menu=menu)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代码实现

    from tkinter.scrolledtext import ScrolledText
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("562x402")
        window.resizable(width=False,height=False)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=1, sticky=tk.N + tk.S)
    
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=2,sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_menu(window):
        '''部署顶部菜单'''
        menu = tk.Menu(window)
    
        fmenu = tk.Menu(menu)
        fmenu.add_command(label="打开")
        fmenu.add_command(label="保存")
    
        menu.add_cascade(label="文件",menu=fmenu)
        window.config(menu=menu)
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署scrolledtext控件
        deploy_scrolledtext(window)
        # 部署顶部菜单栏
        deploy_menu(window)
        # 进入主循环
        window.mainloop()
    
    
    if __name__ == '__main__':
        main()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    演示效果如下:

    四、python图形界面tk之多选框实现示例

    参考博客Tkinter 复选框 ->Checkbutton中
    多选框的演示代码是基于三、python图形界面tk之顶部菜单栏实现示例代码实现的。既在上面的代码中添加了一个deploy_check_button()函数,并且修改了整体的行列布局

    def deploy_check_button(window):
        '''部署checkbutton控件'''
        global spider_type,model_type
        spider_type = tk.IntVar() # 默认为0
        model_type = tk.IntVar()
        spider_type.set(1)  # 设置spider_type为选中
        checkbutton1 = tk.Checkbutton(window,text="spider_type",onvalue=1,offvalue=0,variable=spider_type)
        checkbutton1.grid(row=0, column=1)
        checkbutton2 =tk.Checkbutton(window,text="model_type",onvalue=1,offvalue=0,variable=model_type)
        checkbutton2.grid(row=0, column=2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代码实现

    from tkinter.scrolledtext import ScrolledText
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("562x402")
        window.resizable(width=True,height=True)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=1, sticky=tk.N + tk.S)
    
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=2,sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_menu(window):
        '''部署顶部菜单'''
        menu = tk.Menu(window)
    
        fmenu = tk.Menu(menu)
        fmenu.add_command(label="打开")
        fmenu.add_command(label="保存")
    
        menu.add_cascade(label="文件",menu=fmenu)
        window.config(menu=menu)
    
    def deploy_check_button(window):
        '''部署checkbutton控件'''
        global spider_type,model_type
        spider_type = tk.IntVar()  # IntVar()默认初始值为0
        model_type = tk.IntVar()
        spider_type.set(1)  # 设置spider_type为选中
        checkbutton1 = tk.Checkbutton(window,text="spider_type",onvalue=1,offvalue=0,variable=spider_type)
        # checkbutton1.grid(row=0, column=1, sticky=tk.N + tk.S )
        checkbutton1.grid(row=0, column=1)
        checkbutton2 =tk.Checkbutton(window,text="model_type",onvalue=1,offvalue=0,variable=model_type)
        checkbutton2.grid(row=0, column=2)
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署scrolledtext控件
        deploy_scrolledtext(window)
        # 部署顶部菜单栏
        deploy_menu(window)
        # 部署checkbutton控件
        deploy_check_button(window)
        # 进入主循环
        window.mainloop()
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    演示效果如下:

    五、python图形界面tk之打开文件实现示例

    参考博客python|实现tkinter的文件打开与保存对话框
    【tkinter标准对话框】filedialog:打开保存,文件对话框!
    打开文件的演示代码是基于四、python图形界面tk之多选框实现示例代码实现的。既在上面的代码中添加了一个**open_file()**函数,并将open_file()函数与顶部菜单的“打开”绑定在一起。

    def open_file():
        '''打开文件'''
        # file = askopenfile(mode='r',filetypes=[('Txt Files', '*.txt')])
        # 注意需要指定filetypes参数 指定打开文件的类型
        with askopenfile(mode='r',filetypes=[("文本文件", "*.txt")]) as f:
            path = f.name  # 获取文件的路径
            file = open(path,"r",encoding="utf8")
            if file is not None:
                content = file.read()
                print("content",content)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代码实现

    from tkinter.scrolledtext import ScrolledText
    from tkinter.filedialog import askopenfile
    from tkinter import messagebox as msgbox
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("562x402")
        window.resizable(width=False,height=False)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=3, sticky=tk.N + tk.S)
    
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=4,sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_menu(window):
        '''部署顶部菜单'''
        menu = tk.Menu(window)
    
        fmenu = tk.Menu(menu)
        fmenu.add_command(label="打开",command=open_file)
        fmenu.add_command(label="保存")
    
        menu.add_cascade(label="文件",menu=fmenu)
        window.config(menu=menu)
    
    def deploy_check_button(window):
        '''部署checkbutton控件'''
        global spider_type,model_type
        spider_type = tk.IntVar()
        model_type = tk.IntVar()
        spider_type.set(1)  # 设置spider_type为选中
        checkbutton1 = tk.Checkbutton(window,text="spider_type",onvalue=1,offvalue=0,variable=spider_type)
        # checkbutton1.grid(row=0, column=1, sticky=tk.N + tk.S )
        checkbutton1.grid(row=0, column=1)
        checkbutton2 =tk.Checkbutton(window,text="model_type",onvalue=1,offvalue=0,variable=model_type)
        checkbutton2.grid(row=0, column=2)
    
    
    def open_file():
        '''打开文件'''
        # file = askopenfile(mode='r',filetypes=[('Txt Files', '*.txt')])
        # 注意需要指定filetypes参数
        with askopenfile(mode='r',filetypes=[("文本文件", "*.txt")]) as f:
            path = f.name  # 获取文件的路径
            file = open(path,"r",encoding="utf8")
            if file is not None:
                content = file.read()
                print("content",content)
        def clicked():
            msgbox.showinfo("info", "文件打开成功!")
        clicked()
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署scrolledtext控件
        deploy_scrolledtext(window)
        # 部署顶部菜单栏
        deploy_menu(window)
        # 部署checkbutton控件
        deploy_check_button(window)
        # 进入主循环
        window.mainloop()
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    演示效果如下:

    六、python图形界面tk之保存文件实现示例

    参考博客python|实现tkinter的文件打开与保存对话框
    保存文件的演示代码是基于五、python图形界面tk之打开文件实现示例代码实现的。既在上面的代码中添加了一个save_file() 函数,并将save_file()函数与顶部菜单的“保存”绑定在一起,save_file()函数的作用保存scrolledtext中的文本内容

    def save_file():
        '''保存文件'''
        # 定义保存的初始路径在当前文件夹 定义默认保存文件名为temp.txt
        file_path = asksaveasfilename(initialdir=r'.\\',initialfile="temp.txt") 
        print("filepath:",file_path)
        if file_path is not None:
            with open(file=file_path, mode='a+', encoding='utf-8') as file:
                print(scr.get("1.0",'end-1c'))
                file.write(scr.get("1.0",'end-1c'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    代码实现

    from tkinter.scrolledtext import ScrolledText
    from tkinter.filedialog import asksaveasfilename
    from tkinter.filedialog import askopenfile
    from tkinter import messagebox as msgbox
    from ttkbootstrap import Style
    import tkinter as tk
    
    def create_windows():
        '''初始化窗口'''
        window = tk.Tk()
        window.title("Test")
        window.geometry("562x402")
        window.resizable(width=False,height=False)
        return window
    
    def deploy_entry(window):
        '''部署entry控件'''
        global entry
        entry = tk.Entry(window, bd=5, textvariable="请输入",bg='SteelBlue3', cursor='cross', fg='black',font=('宋体','10','bold'),width=15)
        entry.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_button(window):
        '''部署button控件'''
        button = tk.Button(window,text="点击",font=('宋体','15','bold'),bg="SteelBlue1",width=13)
        button.grid(row=0, column=3, sticky=tk.N + tk.S)
    
    
    def deploy_scrolledtext(window):
        '''部署scrolledtext控件'''
        global scr
        scr = tk.scrolledtext.ScrolledText(window, width=45,font=("隶书",18),height=15,
                                        wrap=tk.WORD,bg="misty rose")  # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
        scr.grid(row=1, column=0,columnspan=4,sticky=tk.N + tk.S + tk.W + tk.E)
    
    def deploy_menu(window):
        '''部署顶部菜单'''
        menu = tk.Menu(window)
    
        fmenu = tk.Menu(menu)
        fmenu.add_command(label="打开",command=open_file)
        fmenu.add_command(label="保存",command=save_file)
    
        menu.add_cascade(label="文件",menu=fmenu)
        window.config(menu=menu)
    
    def deploy_check_button(window):
        '''部署checkbutton控件'''
        global spider_type,model_type
        spider_type = tk.IntVar()
        model_type = tk.IntVar()
        spider_type.set(1)  # 设置spider_type为选中
        checkbutton1 = tk.Checkbutton(window,text="spider_type",onvalue=1,offvalue=0,variable=spider_type)
        # checkbutton1.grid(row=0, column=1, sticky=tk.N + tk.S )
        checkbutton1.grid(row=0, column=1)
        checkbutton2 =tk.Checkbutton(window,text="model_type",onvalue=1,offvalue=0,variable=model_type)
        checkbutton2.grid(row=0, column=2)
    
    
    def open_file():
        '''打开文件'''
        # file = askopenfile(mode='r',filetypes=[('Txt Files', '*.txt')])
        # 注意需要指定filetypes参数
        with askopenfile(mode='r',filetypes=[("文本文件", "*.txt")]) as f:
            path = f.name  # 获取文件的路径
            file = open(path,"r",encoding="utf8")
            if file is not None:
                content = file.read()
                print("content",content)
        def clicked():
            msgbox.showinfo("info", "文件打开成功!")
        clicked()
    
    def save_file():
        '''保存文件'''
        # 定义保存的初始路径在当前文件夹 定义默认保存文件名为temp.txt
        file_path = asksaveasfilename(initialdir=r'.\\',initialfile="temp.txt")
        print("filepath:",file_path)
        if file_path is not None:
            with open(file=file_path, mode='a+', encoding='utf-8') as file:
                print(scr.get("1.0",'end-1c'))
                file.write(scr.get("1.0",'end-1c'))
    
    def main():
        '''主函数'''
        # 初始化窗口
        window = create_windows()
        # 部署entry控件
        deploy_entry(window)
        # 部署button控件
        deploy_button(window)
        # 部署scrolledtext控件
        deploy_scrolledtext(window)
        # 部署顶部菜单栏
        deploy_menu(window)
        # 部署checkbutton控件
        deploy_check_button(window)
        # 进入主循环
        window.mainloop()
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    演示效果如下:

  • 相关阅读:
    数据化管理洞悉零售及电子商务运营——商品中的数据化管理
    matplotlib.show() 阻塞程序怎么解决
    【自然语言处理】【文本生成】使用Transformers中的BART进行文本摘要
    【视频加水印】Video Watermark Pro视频添加动态水印(附工具下载地址)
    《Reinforcement Learning: An Introduction》第8章笔记
    7年Android程序员转行一、二、三事
    计算机毕业设计springboot+vue文体用品商城网站
    技术人员如何有效进行各种职场排挤、防止被排挤?
    VXLAN详解
    vue---------商城pc端 购物车模块
  • 原文地址:https://blog.csdn.net/booze_/article/details/126797278