Python - кроссплатформенная оболочка для библиотек GUI? - PullRequest
3 голосов
/ 05 ноября 2011

Я видел через Python - Pygtk VS Pyqt VS WxPython VS Tkinter ; и мой вопрос немного другой.

Например, я использую Ubuntu Gnome, там python-qt по умолчанию не установлен; и поэтому, если я хочу использовать приложение python-qt, я должен загрузить python-qt (плюс библиотеки qt); Я ожидаю, что это может быть что-то подобное для рабочих столов KDE (или других) ...

Ну, часто мне нужно было бы создать очень простой графический интерфейс, и я бы хотел, чтобы он мог "работать где угодно", где есть Python ... Однако, если у пользователя уже есть некоторые из этих библиотек, Я бы сказал, почему бы не использовать их? Для сложных вещей очевидно, что всеобъемлющая оболочка не будет жизнеспособной (в конце концов, все эти библиотеки являются кроссплатформенными), но для простых вещей, таких как примеры "привет работы" ниже, может быть, есть что-то, что уже существует?

По сравнению с приведенными ниже примерами я бы представил что-то вроде (псевдокод):

...
appgui = getCrossPlatformGUI()
mw = appgui.getMainWindow()
button = appgui.getButton(args)
appgui.connect(button, args)
appgui.show(button)
...

... где getCrossPlatformGUI() в Linux сначала будет искать python-qt, если не найден, то python-gtk, затем wxWindows, затем tkInter (в Windows может быть в другом порядке и т. Д.) - и выдаст окно / приложение библиотеки, найденной в системе, по умолчанию во всех случаях с tkInter (который, как я понимаю, всегда встроен в python).

Заранее большое спасибо за любые ответы,
Ура!

hello-pyqt.py (hello-pyqt-ubuntu.png, hello-pyqt-opensuse.png)

#!/usr/bin/env python
# http://en.wikibooks.org/wiki/Python_Programming/PyQt4#Hello.2C_world.21

import sys
from PyQt4 import Qt, QtCore

def sayHello():
  print "Hello, World!"

#####

a = Qt.QApplication(sys.argv)

hellobutton = Qt.QPushButton("Say 'Hello world!'", None)

a.connect(hellobutton, Qt.SIGNAL("clicked()"), sayHello)
hellobutton.clicked.connect(QtCore.QCoreApplication.instance().quit)

hellobutton.show()

a.exec_()

hello-pygtk.py (hello-pygtk-ubuntu.png, hello-pygtk-opensuse.png)

#!/usr/bin/env python
# http://www.pygtk.org/pygtk2tutorial/examples/helloworld.py

import pygtk
pygtk.require('2.0')
import gtk

# This is a callback function. The data arguments are ignored
# in this example. More on callbacks below.
def sayHello(widget, data=None):
  print "Hello, World!"

def destroy(widget, data=None):
  gtk.main_quit()

#####

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", destroy)

hellobutton = gtk.Button("Say 'Hello world!'")

hellobutton.connect("clicked", sayHello, None)
hellobutton.connect_object("clicked", gtk.Widget.destroy, window)

window.add(hellobutton)
hellobutton.show()
window.show()

gtk.main()

1 Ответ

6 голосов
/ 05 ноября 2011

Библиотека под названием wxWidgets была создана именно для этого;«wx» обозначает Windows и X. Их страница истории содержит больше информации.Как вы, наверное, знаете, связывания Python для него - это wxPython.

Похоже, сейчас это похоже на другую тяжеловесную библиотеку GUI, но она «просто» оборачивает родные виджеты GTK / Qt / Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...