문제

Python에는 Tkinter, WXWidgets, Pygtk 등이 많은 GUI 라이브러리가 많이 있지만 이러한 모든 GUI를 설치해야하며 매우 헤비급이어야하므로 언급 된 GUI 라이브러리에 전달되는 최종 사용자 GUI Python 앱을 배포하는 것이 약간 복잡합니다.

최근에 Python의 내장에 대해 생각했습니다 ctypes 기준 치수. 이론적으로, 사용할 수있는 순수한 Python Gui 라이브러리를 만들 수 있습니다. ctypes 창에 ( windll.user32.CreateWindowEx, 등), MacOS의 기본 PYOBJC 및 GNOME / KDE의 PYGK / PYQT. 그러한 라이브러리가 존재합니까? 그렇지 않다면,이 아이디어에 무엇이 잘못되었다고 생각하십니까?

도움이 되었습니까?

해결책

최소한의 노력과 최상의 결과의 경로는 기존 GUI 라이브러리를 사용하여 앱을 배포하는 데 필요한 사항을 배우는 것입니다.

다른 팁

Python 2.7 및 3.1에서 시작하여 TK는 훨씬 더 좋아 보일 것입니다.

http://docs.python.org/dev/whatsnew/2.7.html#ttk-themed-widgets-for-tk

"TCL/TK 8.5는 기본 TK 위젯을 재 구체화하지만 더 사용자 정의 가능한 모양을 가지고 있으므로 기본 플랫폼의 위젯과 더 유사 할 수있는 테마 위젯 세트가 포함되어 있습니다. TCL/TCK 릴리스 8.5에 추가 된 "테마 TK"). "

Tkinter는 Python 표준 분포의 일부이며 기본적으로 설치됩니다. 처음에는 그래픽 디스플레이가있는 모든 Python 설치에서 찾을 수 있습니다.

"Pure Python Gui 라이브러리"라는 개념은 궁극적으로 시스템 레벨 호출 및 위젯을 사용하게되므로 CTYPE를 통해서도 CTYPES 일 수 있지만 아이디어를 구현하기 시작하면 결국 WXPYTHON이 될 것이라는 사실은 바뀌지 않습니다.

주로 잘못된 것은 GTK, TK, WX, QT 및 ILK의 제조업체가 이미 수행 한 바퀴를 재창조한다는 것입니다. 순수한 파이썬 GUI는 기술적으로 실현 가능하지만 다음과 같은 프로젝트 Anygui 비슷한 것을 시도했는데,이 작업을 수행함으로써 얻을 수있는 것은 상대적으로 적습니다.

기본 툴킷은 또한 기본 플랫폼 (기본 대화 상자 등)의 차이점을 다루는 데 더 나은 작업을 수행합니다. 즉, 툴킷을 사용하면 플랫폼 특정 코드가 필요하지 않은 휴대용 응용 프로그램을 작성할 수 있습니다. 대부분의 경우 기본 툴킷에 의해 추상화됩니다.

Windows의 Py2Exe 및 Linux 메소드와 같은 분배 메커니즘을 사용하면 응용 프로그램과 함께 DLL을 번들로 묶을 수 있으므로 필요한 기본 구성 요소를 제자리에 놓는 설치 프로그램을 만들 수 있습니다. 그러나이를 수행하는 일반적인 크로스 플랫폼 방법은 실제로 없으므로 각 플랫폼에 대해 별도의 설치자를 유지해야합니다.

우선, 모든 라이브러리는 다른 추상화를 사용하므로, 이들 모두에서 작동하는 것은 최소한의 공동체 기능 세트를 지원하는 것이 가능할 것입니다. 또는 각각을 최대한 활용하기 위해 많은 노력을 기울입니다.

"헤비급"이 무슨 뜻인지 잘 모르겠습니다.

WX는 각 플랫폼에서 기본 컨트롤을 사용하며 상상할 수있는 것처럼 파이썬에서 사용하기 쉽습니다. 결국 GUI가 복잡해질 수 있기 때문에 GUI API는 복잡합니다.

WX는 창을 구축하는 데 필요한 노력과 화면에 나타나는 품질이 훌륭하다고 생각합니다. 나는 당신이 스스로 더 나은 것을 굴릴 것이라고 생각하지 않습니다.

나는 그것이 바퀴를 발명하지 않는다고 생각합니다. 효과가 있지만 왜 그렇게해야합니까? 언급 한 모든 GUI 라이브러리는 안정적이고 다소 방탄 증명입니다.

순수한 파이썬 라이브러리를 구현하는 실험이 있다고 상상할 수 있습니다. 그러나 나는 하나를 본 적이 없다. Guis에 관한 모든 것은 열심히 일하며 순수한 파이썬 라이브러리에는 큰 청중이 없습니다.

많은 설정이 필요하지 않도록 Tkinter 주변의 가벼운 래퍼는 어떻습니까? pysimplegui Tkinter 위에 제작되어 Tkinter가 실행되는 곳마다 실행됩니다.

Tkinter 대 사용의 장점은 필요한 코드의 양입니다. Pysimplegui 프로그램은 실제로 작곡되는 경향이 있습니다.

다음은 사용 가능한 많은 위젯을 사용하여 사용자 정의 레이아웃을 보여주는 예입니다.

enter image description here

생성하는 코드는 끝에 있습니다. 많은 코드처럼 보일지 모르지만 그게 다입니다. 똑같은 일을하기 위해 Tkinter 코드의 페이지와 페이지와 페이지가 필요합니다.

import PySimpleGUI as sg

sg.ChangeLookAndFeel('GreenTan')
# ------ Menu Definition ------ #
menu_def = [['&File', ['&Open', '&Save', 'E&xit', 'Properties']],
            ['&Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ],
            ['&Help', '&About...'], ]
# ------ Column Definition ------ #
column1 = [[sg.Text('Column 1', background_color='lightblue', justification='center', size=(10, 1))],
           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')],
           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')],
           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')]]

layout = [
    [sg.Menu(menu_def, tearoff=True)],
    [sg.Text('(Almost) All widgets in one Window!', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
    [sg.Text('Here is some text.... and a place to enter text')],
    [sg.InputText('This is my text')],
    [sg.Frame(layout=[
    [sg.Checkbox('Checkbox', size=(10,1)),  sg.Checkbox('My second checkbox!', default=True)],
    [sg.Radio('My first Radio!     ', "RADIO1", default=True, size=(10,1)), sg.Radio('My second Radio!', "RADIO1")]], title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')],
    [sg.Multiline(default_text='This is the default Text should you decide not to type anything', size=(35, 3)),
     sg.Multiline(default_text='A second multi-line', size=(35, 3))],
    [sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 1)),
     sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)],
    [sg.InputOptionMenu(('Menu Option 1', 'Menu Option 2', 'Menu Option 3'))],
    [sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)),
     sg.Frame('Labelled Group',[[
     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25),
     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75),
     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10),
     sg.Column(column1, background_color='lightblue')]])],
    [sg.Text('_' * 80)],
    [sg.Text('Choose A Folder', size=(35, 1))],
    [sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'),
     sg.InputText('Default Folder'), sg.FolderBrowse()],
    [sg.Submit(tooltip='Click to submit this form'), sg.Cancel()]]

window = sg.Window('Everything bagel', default_element_size=(40, 1), grab_anywhere=False).Layout(layout)
button, values = window.Read()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top