圖形用戶界面(GUI)常見問題?
目錄
Python 是否有平臺無關(guān)的圖形界面工具包??
針對不同的(操作系統(tǒng)或)平臺,有多種工具包可供選擇。雖然有些工具包還沒有移植到 Python 3 上,但至少目前 Tkinter 以及 Qt 是兼容 Python 3 的。
Tkinter?
Python 的標(biāo)準(zhǔn)編譯包含了 tkinter。這是一個面向?qū)ο蟮慕涌?,指? Tcl/Tk 微件包。 該接口大概是最容易安裝(因為該接口包含在 Python 的大部分 二進(jìn)制發(fā)行版 中)和使用的工具包。要了解 Tk 的詳情,比如源代碼等,可訪問 Tcl/Tk 項目主頁。 Tcl/Tk 可完整移植至 Mac OS X,Windows 和 Unix 操作系統(tǒng)上。
wxWidgets?
wxWidgets (https://www.wxwidgets.org) 是一個自由、可移植的 GUI 圖形用戶界面類庫,使用 C++ 編寫。它可以在多個操作系統(tǒng)平臺上提供原生自然的界面觀感。包括Windows、Mac OS X、 GTK 和 X11 平臺在內(nèi),都是wxWidgets 當(dāng)前穩(wěn)定支持的平臺。在語言綁定適配方面,wxWidgets 類庫可用于較多語言,包括 Python,Perl,Ruby等。
wxPython 是 wxWidgets 的 Python 適配。雖然該綁定在更新進(jìn)度上經(jīng)常會稍稍落后于 wxWidgets,但它利用純 Python 擴展,提供了許多其他語言綁定沒有實現(xiàn)的特性。wxPython 有一個活躍的用戶和開發(fā)者社區(qū)。
wxWidgets 和 wxPython 都是自由開源庫。寬松的許可證允許人們在商業(yè)軟件、自由軟件和共享軟件中使用它們。
Qt?
Qt 工具包 (可使用 PyQt 或 PySide) 及 KDE (PyKDE4) 有多個綁定適配可供選擇。 PyQt 當(dāng)前相較 PySide 更成熟,但如果你想編寫專有軟件,就必須要從 Riverbank Computing 購買 PyQt 許可證。 PySide 則可以自由使用于各類軟件。
Qt 4.5 以上版本使用 LGPL 進(jìn)行許可;此外,商業(yè)許可證可從 Qt 公司 那里獲得。
Gtk+?
針對 Python 的 GObject 內(nèi)省綁定 可以用于編寫 GTK+ 3 應(yīng)用。 另請參閱 Python GTK+ 3 教程。
更早的、針對 Gtk+ 2 工具包 的 PyGtk 綁定,是由 James Henstridge 實現(xiàn)的。具體請參考 <http://www.pygtk.org>。
Kivy?
Kivy 是一種跨平臺圖形用戶界面庫,同時支持桌面操作系統(tǒng)(Windows,macOS 和 Linux)以及移動設(shè)備(Android,iOS)。該庫使用 Python 和 Cython 編寫,可以使用一系列窗口后端。
Kivy 是自由的開源軟件,使用 MIT 許可證分發(fā)。
FLTK?
the FLTK toolkit 的Python綁定是簡單卻功能強大且成熟的跨平臺窗口系統(tǒng),可以在 the PyFLTK project 里獲得相關(guān)信息。
有哪些Python的GUI工具是某個平臺專用的??
通過安裝 PyObjc Objective-C bridge,Python程序可以使用Mac OS X的Cocoa庫。
Mark Hammond的 Pythonwin 包括一個微軟基礎(chǔ)類(MFC)的接口和一個絕大多數(shù)由使用MFC類的Python寫成的Python編程環(huán)境。
有關(guān)Tkinter的問題?
我怎樣“凍結(jié)”Tkinter程序??
Freeze (意為 “凍結(jié)”)是一個用來創(chuàng)建獨立應(yīng)用程序的工具。 當(dāng) “凍結(jié)” Tkinter 程序時,程序并不是真的能夠獨立運行,因為程序仍然需要 Tcl 和 Tk 庫。
一種解決方法是將程序與 Tcl 和 Tk 庫一同發(fā)布,并且在運行時使用環(huán)境變量 TCL_LIBRARY 和 TK_LIBRARY 指向他們的位置。
為了獲得真正能獨立運行的應(yīng)用程序,來自庫里的 Tcl 腳本也需要被整合進(jìn)應(yīng)用程序。 一個做這種事情的工具叫 SAM (stand-alone modules,獨立模塊) ,它是 Tix distribution (http://tix.sourceforge.net/) 的一部分。
在啟用 SAM 時編譯 Tix ,在 Python 文件 Modules/tkappinit.c 中執(zhí)行對 Tclsam_init() 等的適當(dāng)調(diào)用,并且將程序與 libtclsam 和 libtksam 相鏈接(可能也要包括 Tix 的庫)。
在等待 I/O 操作時能夠處理 Tk 事件嗎??
在 Windows 以外的其他平臺上可以,你甚至不需要使用線程! 但是你必須稍微修改一下你的 I/O 代碼。 Tk 有與 Xt 的 XtAddInput() 對應(yīng)的調(diào)用,它允許你注冊一個回調(diào)函數(shù),當(dāng)一個文件描述符可以進(jìn)行 I/O 操作的時候,Tk 主循環(huán)將會調(diào)用這個回調(diào)函數(shù)。 參見 文件句柄。
在Tkinter中鍵綁定不工作:為什么??
經(jīng)常聽到的抱怨是:已經(jīng)通過 bind() 方法綁定了事件的處理程序,但是,當(dāng)按下相關(guān)的按鍵后,這個處理程序卻沒有執(zhí)行。
最常見的原因是,那個綁定的控件沒有“鍵盤焦點”。請在 Tk 文檔中查找 focus 指令。通常一個控件要獲得“鍵盤焦點”,需要點擊那個控件(而不是標(biāo)簽;請查看 takefocus 選項)。
