>백엔드 개발 >파이썬 튜토리얼 >Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

王林
王林앞으로
2023-04-11 13:52:031976검색

Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

일상 업무와 학습에서 우리는 파일 일괄 처리, 사진 일괄 처리 등과 같은 다양한 자동화 작업을 완료하기 위해 간단한 Python GUI 도구를 작성하는 경우가 많습니다. 우리는 이러한 도구를 작성할 때 기능 구현에만 초점을 맞추고 페이지의 미화를 무시하는 경우가 많습니다. 이로 인해 Python으로 작성된 GUI 프로그램이 상대적으로 눈에 띄지 않게 됩니다. 미화, 순수 Python으로 작성된 GUI 프로그램이 얼마나 아름다운지 살펴보겠습니다!

페이지 레이아웃

먼저 기본 GUI 레이아웃을 완성합니다

16진수 변환 도구를 만들고 싶다고 가정하면 일반적인 레이아웃은 다음과 같습니다.

Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

위 그림은 완전히 Python을 통한 것입니다. 내장 GUI 라이브러리 tkinter를 사용하여 작성되었습니다.

코드 부분은 다음과 같습니다.

from tkinter import ttk
from tkinter import *
class Transform():
 def __init__(self):
 self.root = Tk()
 self.root.title("进制转换工具")
 self.root.geometry("600x280")
 self.root.resizable(False, False)
 self.var = StringVar()
 self.values = ['2', '8', '10', '16', '32', '36', '58', '62']
 self.myWidget()
 self.myLayout()
 def myWidget(self):
 self.container = Frame(self.root)
 # 转换设置区域
 self.lf_group1 = LabelFrame(master=self.container, text="转换设置")
 self.cb = Checkbutton(self.lf_group1, text="是否自动转换")
 self.cb.invoke()
 self.bt = Button(self.lf_group1, text='转换')
 self.en = Entry(self.lf_group1, text='warning')
 # 进制选择区域
 self.lf_group2 = LabelFrame(master=self.container, text="进制选择")
 self.lb1 = Label(self.lf_group2, text="请选择待转换的进制")
 self.cbo1 = ttk.Combobox(
 master=self.lf_group2,
 values=self.values
 )
 self.cbo1.set(self.values[2])
 self.lb2 = Label(self.lf_group2, text="请选择转换后的进制")
 self.cbo2 = ttk.Combobox(
 master=self.lf_group2,
 values=self.values,
 )
 self.cbo2.set(self.values[0])
 # 进制输出区域
 self.txt = Text(master=self.container, height=5, width=50)
 def myLayout(self):
 self.container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5)
 self.lf_group1.pack(fill=X, side=TOP)
 self.lf_group2.pack(fill=X, pady=10, side=TOP)
 self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X)
 self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X)
 self.en.pack(side=LEFT, expand=YES, padx=5, fill=X)
 self.lb1.pack(side=LEFT, expand=YES, padx=5)
 self.cbo1.pack(side=LEFT, expand=YES, pady=5)
 self.lb2.pack(side=LEFT, expand=YES, padx=5)
 self.cbo2.pack(side=LEFT, expand=YES, pady=5)
 self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES)
 def run(self):
 self.container.mainloop()
if __name__ == '__main__':
 trans = Transform()
 trans.run()

코드도 복잡하지 않고, 레이아웃도 가장 기본적인 팩 방식입니다. GUI 프로그램 전체는 깔끔해 보이지만, 색상이 단조롭고, 각 구성 요소가 밋밋하지 않습니다. 매우 아름답습니다. 다음에는 아름답게 해보자.

페이지 미화

먼저 CSS를 수동으로 설정하여 페이지를 미화합니다. 여기서는 주로 tkonter 라이브러리의 config 속성을 사용합니다.

먼저 배경색을 설정합니다:

self.container.config(bg='#073642')

전체 컨테이너 컨테이너의 배경색을 #073642

그런 다음 각 구성 요소의 스타일을 개별적으로 설정합니다.

self.lf_group1.config(bg='#073642', fg="white")
self.lf_group2.config(bg='#073642', fg="white")
self.cb.config(bg='#073642', selectcolor='#073642', activebackground='#073642',
activeforeground='#073642', fg="white")
self.bt.config(bg="azure3")
self.en.config(highlightbackground="#0b5162", highlightcolor="#0b5162",
insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro",
bg="#073642", highlightthickness=2, relief="solid")
self.lb1.config(bg='#073642', activebackground='#073642',
 activeforeground='#073642', fg="white")
self.lb2.config(bg='#073642', activebackground='#073642',
 activeforeground='#073642', fg="white")
self.txt.config(insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro",
 wrap="none", bg='#073642')

모두 구성을 통해 설정됩니다. 색상은 온라인 색상 선택기를 통해 선택할 수 있습니다.

  • https://tools.kalvinbg.cn/dev/colorPicker 다음으로 드롭다운 상자 스타일을 설정합니다. 드롭다운 상자 구성 요소에는 몇 가지 특별한 사항이 있습니다.

이 컴포넌트는 ttk 컴포넌트에 속하므로 테마를 통해 스타일을 설정해야 합니다. 코드는 다음과 같습니다.

combostyle = ttk.Style()
combostyle.theme_create('combostyle', parent='alt',
 settings={'TCombobox':
 {'configure':
 {
 'foreground': 'white',
 'selectbackground': '#073642',# 选择后的背景颜色
 'fieldbackground': '#073642',# 下拉框颜色
 'background': '#073642',# 下拉按钮背景颜色
 "font": 10,# 字体大小
 }}}
 )
combostyle.theme_use('combostyle')

이렇게 해서 전체 GUI 프로그램의 스타일이 설정됩니다. 최종 효과를 보세요:

Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

외관이 여러 수준으로 향상되었음을 분명히 알 수 있습니다!

ttkbootstrap을 사용하여 페이지를 아름답게 하세요

물론, ttkbootstrap 라이브러리를 사용하여 페이지를 아름답게 만드는 더 간단하고 효과적인 미화 방법도 있습니다.

먼저 pip를 통해 ttkbootstrap 라이브러리를 설치하세요:

pip install ttkbootstrap

그런 다음 프로젝트에서 라이브러리를 참조하세요:

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
class MainCreator(ttk.Window):
 def __init__(self):
 super().__init__("进制转换工具", themename="solar", resizable=(False, False))# 设置一个主题

이때 구성 요소의 레이아웃이 완료되면 페이지의 전체 스타일이 다음 스타일이 됩니다. 물론 태양 테마를 사용하면 더 많은 스타일 효과를 얻기 위해 다양한 구성 요소에 bootstyle 속성을 추가할 수 있습니다.

def create_frame(self):
 """Create all the frame widgets"""
 container = ttk.Frame(self)
 container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5)
 color_group = ttk.Labelframe(
 master=container, text="转换设置", padding=10
 )
 color_group.pack(fill=X, side=TOP)
 self.cb = ttk.Checkbutton(color_group, text="是否自动转换", variable=self.cbvar)
 self.cb.invoke()
 self.bt = ttk.Button(color_group, text='转换', bootstyle='success')
 self.en = ttk.Entry(color_group, text='warning', bootstyle='warning')
 self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X)
 self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X)
 self.en.pack(side=LEFT, expand=YES, padx=5, fill=X)
 cr_group = ttk.Labelframe(
 master=container, text="进制选择", padding=10
 )
 cr_group.pack(fill=X, pady=10, side=TOP)
 values = ['2', '8', '10', '16', '32', '36', '58', '62']
 cr3 = ttk.Label(cr_group, text="请选择待转换的进制")
 cr3.pack(side=LEFT, expand=YES, padx=5)
 self.cbo1 = ttk.Combobox(
 master=cr_group,
 values=values,
 )
 self.cbo1.pack(side=LEFT, expand=YES, pady=5)
 self.cbo1.set(values[2])
 cr5 = ttk.Label(cr_group, text="请选择转换后的进制")
 cr5.pack(side=LEFT, expand=YES, padx=5)
 self.cbo2 = ttk.Combobox(
 master=cr_group,
 values=values,
 )
 self.cbo2.pack(side=LEFT, expand=YES, pady=5)
 self.cbo2.set(values[0])
 self.txt = ttk.Text(master=container, height=5, width=50, wrap="none")
 self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES)

최종 효과는 다음과 같습니다.

Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!

이 라이브러리를 사용하면 CSS 스타일을 수동으로 추가하는 것보다 전체적인 효과가 더 아름답고 편리하다는 것을 알 수 있습니다!

오늘은 여기까지만 공유했습니다. 다음에 또 만나요~

위 내용은 Python으로 GUI 프로그램을 작성하는 것이 추악하다고 누가 말했습니까? 그건 당신이 그것을 아름답게 하는 방법을 모르기 때문이에요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제