Python图形界面设计美化指南:Tkinter界面美化实战

这篇文章主要介绍了python美化图形化界面设计,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

文章目录
  • 前言
  • 一、Python GUI 编程可选方案有哪些
  • 二、基础入门
  • 1. 装载库
  • 2. 最简单的结构
  • 2.1 图片显示的例子
  • 2.2 PanedWindow的例子
  • 2.3 背景色选择的例子
  • 三、主题选择
  • 3.2 Sun-Valley-ttk-theme
  • 3.2 ttkbootstrap
  • 总结

  • 前言

    推荐链接:

    1. Python中文开发手册 ttk(Tk)
    2. Python GUI编程(Tkinter)|菜鸟教程
    3. Tkinter(28)标签部件 ttk.label
    4. tkinter图形界面开发

    上述链接用于弥补属性知识了解不充分及组件介绍,用于查阅.


    一、Python GUI 编程可选方案有哪些

    Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:

    Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中不会c语言直接学python。

    wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。

    Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。

    提示:我们本篇文章要讲的则是tkinter

    二、基础入门

    1. 装载库

    pip install tkinter
    

    2. 最简单的结构

    import tkinter as tk
    root = tk.Tk()
    root.mainloop()
    

    2.1 图片显示的例子
    import tkinter
    import tkinter.messagebox
    from PIL import Image, ImageTk
    
    def get_image(filename,width,height):
        im = Image.open(filename).resize((width,height))
        return ImageTk.PhotoImage(im)
    
    # 用构造方法Tk()创建主窗口容器。
    root = tkinter.Tk()
    # 设置窗口标题
    root.title("background example")
    # 设置窗口尺寸及初始化位置
    root.geometry('800x600+300+150')
    root.resizable(False,False)
    
    # 画布控件;显示图形元素如线条或文本
    canvas_root = tkinter.Canvas(root,width=800,height=600)
    # 获取图像
    im_root=get_image("bigsur.png",800,600)
    canvas_root.create_image(400,300,image=im_root)
    
    # 标签控件
    #---------------------------------------------------------------------------------------------------------------------------------------------------------
    #                          画布  内容                      对准方式             控件背景         #关键:设置为背景图片        字体                前景色
    #---------------------------------------------------------------------------------------------------------------------------------------------------------
    Label_root = tkinter.Label(root,text="我是内容,\n请你阅读",justify=tkinter.LEFT,image = im_root,compound = tkinter.CENTER,font=("华文行楷",20),fg = "white")
    Label_root.pack()
    
    # 画布控件以包裹方式添加进窗口
    canvas_root.pack()
    
    # 执行消息循环,相当于while循环,则之后的代码不被执行
    root.mainloop()
    

    2.2 PanedWindow的例子

    下述引用另一位博主的例子

    版权声明:本文为CSDN博主「视觉智能」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wujuxKkoolerter/article/details/123767781

    效果如下:

    完整代码如下:

    import tkinter as tk
    from tkinter import ttk
    
    root = tk.Tk()
    root.title('PanedWindow Demo')
    root.geometry('300x200')
    
    # change style to classic (Windows only) 
    # to show the sash and handle
    style = ttk.Style()
    style.theme_use('classic')
    
    # paned window
    pw = ttk.PanedWindow(orient=tk.HORIZONTAL)
    
    # Left listbox
    left_list = tk.Listbox(root)
    left_list.pack(side=tk.LEFT)
    pw.add(left_list)
    
    # Right listbox
    right_list = tk.Listbox(root)
    right_list.pack(side=tk.LEFT)
    pw.add(right_list)
    
    # place the panedwindow on the root window
    pw.pack(fill=tk.BOTH, expand=True)
    
    root.mainloop()
    
    # Tkinter基础 Button bg 设置按钮的背景颜色
    import tkinter as tk
    
    class App():
        def __init__(self, master):
            frame = tk.Frame(master)
            frame.pack()
            self.testButton = tk.Button(frame, text = "hello", fg = "red", bg = "blue", command = self.testPrint)
            self.testButton.pack()
    
        def testPrint(self):
            print("test")
    
    root = tk.Tk()
    app = App(root)
    root.mainloop()
    
    2.3 背景色选择的例子

    版权声明:本文为CSDN博主「chl0000」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/chl0000/article/details/7657887

    效果如下:

    代码如下:

    from tkinter import *
    
    colors = '''#FFB6C1 LightPink 浅粉红
    #FFC0CB Pink 粉红
    #DC143C Crimson 深红/猩红
    #FFF0F5 LavenderBlush 淡紫红
    #DB7093 PaleVioletRed 弱紫罗兰红
    #FF69B4 HotPink 热情的粉红
    #FF1493 DeepPink 深粉红
    #C71585 MediumVioletRed 中紫罗兰红
    #DA70D6 Orchid 暗紫色/兰花紫
    #D8BFD8 Thistle 蓟色
    #DDA0DD Plum 洋李色/李子紫
    #EE82EE Violet 紫罗兰
    #FF00FF Magenta 洋红/玫瑰红
    #FF00FF Fuchsia 紫红/灯笼海棠
    #8B008B DarkMagenta 深洋红
    #800080 Purple 紫色
    #BA55D3 MediumOrchid 中兰花紫
    #9400D3 DarkViolet 暗紫罗兰
    #9932CC DarkOrchid 暗兰花紫
    #4B0082 Indigo 靛青/紫兰色
    #8A2BE2 BlueViolet 蓝紫罗兰
    #9370DB MediumPurple 中紫色
    #7B68EE MediumSlateBlue 中暗蓝色/中板岩蓝
    #6A5ACD SlateBlue 石蓝色/板岩蓝
    #483D8B DarkSlateBlue 暗灰蓝色/暗板岩蓝
    #E6E6FA Lavender 淡紫色/熏衣草淡紫
    #F8F8FF GhostWhite 幽灵白
    #0000FF Blue 纯蓝
    #0000CD MediumBlue 中蓝色
    #191970 MidnightBlue 午夜蓝
    #00008B DarkBlue 暗蓝色
    #000080 Navy 海军蓝
    #4169E1 RoyalBlue 皇家蓝/宝蓝
    #6495ED CornflowerBlue 矢车菊蓝
    #B0C4DE LightSteelBlue 亮钢蓝
    #778899 LightSlateGray 亮蓝灰/亮石板灰
    #708090 SlateGray 灰石色/石板灰
    #1E90FF DodgerBlue 闪兰色/道奇蓝
    #F0F8FF AliceBlue 爱丽丝蓝
    #4682B4 SteelBlue 钢蓝/铁青
    #87CEFA LightSkyBlue 亮天蓝色
    #87CEEB SkyBlue 天蓝色
    #00BFFF DeepSkyBlue 深天蓝
    #ADD8E6 LightBlue 亮蓝
    #B0E0E6 PowderBlue 粉蓝色/火药青
    #5F9EA0 CadetBlue 军兰色/军服蓝
    #F0FFFF Azure 蔚蓝色
    #E0FFFF LightCyan 淡青色
    #AFEEEE PaleTurquoise 弱绿宝石
    #00FFFF Cyan 青色
    #00FFFF Aqua 浅绿色/水色
    #00CED1 DarkTurquoise 暗绿宝石
    #2F4F4F DarkSlateGray 暗瓦灰色/暗石板灰
    #008B8B DarkCyan 暗青色
    #008080 Teal 水鸭色
    #48D1CC MediumTurquoise 中绿宝石
    #20B2AA LightSeaGreen 浅海洋绿
    #40E0D0 Turquoise 绿宝石
    #7FFFD4 Aquamarine 宝石碧绿
    #66CDAA MediumAquamarine 中宝石碧绿
    #00FA9A MediumSpringGreen 中春绿色
    #F5FFFA MintCream 薄荷奶油
    #00FF7F SpringGreen 春绿色
    #3CB371 MediumSeaGreen 中海洋绿
    #2E8B57 SeaGreen 海洋绿
    #F0FFF0 Honeydew 蜜色/蜜瓜色
    #90EE90 LightGreen 淡绿色
    #98FB98 PaleGreen 弱绿色
    #8FBC8F DarkSeaGreen 暗海洋绿
    #32CD32 LimeGreen 闪光深绿
    #00FF00 Lime 闪光绿
    #228B22 ForestGreen 森林绿
    #008000 Green 纯绿
    #006400 DarkGreen 暗绿色
    #7FFF00 Chartreuse 黄绿色/查特酒绿
    #7CFC00 LawnGreen 草绿色/草坪绿
    #ADFF2F GreenYellow 绿黄色
    #556B2F DarkOliveGreen 暗橄榄绿
    #9ACD32 YellowGreen 黄绿色
    #6B8E23 OliveDrab 橄榄褐色
    #F5F5DC Beige 米色/灰棕色
    #FAFAD2 LightGoldenrodYellow 亮菊黄
    #FFFFF0 Ivory 象牙色
    #FFFFE0 LightYellow 浅黄色
    #FFFF00 Yellow 纯黄
    #808000 Olive 橄榄
    #BDB76B DarkKhaki 暗黄褐色/深卡叽布
    #FFFACD LemonChiffon 柠檬绸
    #EEE8AA PaleGoldenrod 灰菊黄/苍麒麟色
    #F0E68C Khaki 黄褐色/卡叽布
    #FFD700 Gold 金色
    #FFF8DC Cornsilk 玉米丝色
    #DAA520 Goldenrod 金菊黄
    #B8860B DarkGoldenrod 暗金菊黄
    #FFFAF0 FloralWhite 花的白色
    #FDF5E6 OldLace 老花色/旧蕾丝
    #F5DEB3 Wheat 浅黄色/小麦色
    #FFE4B5 Moccasin 鹿皮色/鹿皮靴
    #FFA500 Orange 橙色
    #FFEFD5 PapayaWhip 番木色/番木瓜
    #FFEBCD BlanchedAlmond 白杏色
    #FFDEAD NavajoWhite 纳瓦白/土著白
    #FAEBD7 AntiqueWhite 古董白
    #D2B48C Tan 茶色
    #DEB887 BurlyWood 硬木色
    #FFE4C4 Bisque 陶坯黄
    #FF8C00 DarkOrange 深橙色
    #FAF0E6 Linen 亚麻布
    #CD853F Peru 秘鲁色
    #FFDAB9 PeachPuff 桃肉色
    #F4A460 SandyBrown 沙棕色
    #D2691E Chocolate 巧克力色
    #8B4513 SaddleBrown 重褐色/马鞍棕色
    #FFF5EE Seashell 海贝壳
    #A0522D Sienna 黄土赭色
    #FFA07A LightSalmon 浅鲑鱼肉色
    #FF7F50 Coral 珊瑚
    #FF4500 OrangeRed 橙红色
    #E9967A DarkSalmon 深鲜肉/鲑鱼色
    #FF6347 Tomato 番茄红
    #FFE4E1 MistyRose 浅玫瑰色/薄雾玫瑰
    #FA8072 Salmon 鲜肉/鲑鱼色
    #FFFAFA Snow 雪白色
    #F08080 LightCoral 淡珊瑚色
    #BC8F8F RosyBrown 玫瑰棕色
    #CD5C5C IndianRed 印度红
    #FF0000 Red 纯红
    #A52A2A Brown 棕色
    #B22222 FireBrick 火砖色/耐火砖
    #8B0000 DarkRed 深红色
    #800000 Maroon 栗色
    #FFFFFF White 纯白
    #F5F5F5 WhiteSmoke 白烟
    #DCDCDC Gainsboro 淡灰色
    #D3D3D3 LightGrey 浅灰色
    #C0C0C0 Silver 银灰色
    #A9A9A9 DarkGray 深灰色
    #808080 Gray 灰色
    #696969 DimGray 暗淡灰
    #000000 Black 纯黑'''
    
    root = Tk()
    i = 0
    colcut = 5
    for color in colors.split('\n'):
        sp = color.split(' ')
        try:
            Label(text=color, bg=sp[1]).grid(row=int(i/colcut),column=i%colcut, sticky=W+E+N+S)
        except :
            print('err',color)
            Label(text='ERR'+color).grid(row=int(i/colcut),column=i%colcut, sticky=W+E+N+S)
        i += 1
    root.mainloop()
    

    三、主题选择

    tkinter默认的样式太丑

    3.2 Sun-Valley-ttk-theme

    GitHub – rdbende/Sun-Valley-ttk-theme: A gorgeous theme for Tkinter/ttk, based on the Sun Valley visual style ✨
    请添加图片描述


    3.2 ttkbootstrap

    GitHub – israel-dryer/ttkbootstrap: A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap.


    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了tkinter的使用及主题推荐,具体使用方法可以参考git相关example

    作者:high_colever

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python图形界面设计美化指南:Tkinter界面美化实战

    发表回复