是否有任何跨平台的python窗口工具包不是';不是疯子做的吗?

是否有任何跨平台的python窗口工具包不是';不是疯子做的吗?,python,object,cross-platform,window,toolkit,Python,Object,Cross Platform,Window,Toolkit,也许“疯狂”这个词有点太强了,但我想问的是,是否有任何窗口工具包不让我这么做: class MyApp(SomeWindowClass): 我真的不想使用一个由对对象如此着迷的人制作的库,他/她认为应用程序应该有一个类(只有一个实例,所以我不明白为什么有人会想额外键入) (顺便说一句,我无意冒犯任何同意这些库设置方式的人,我只是想知道是否有任何东西可以少一点对象)有。Tkinter每个窗口/对话框有一个对象,而不是应用程序,并且不需要类就可以在屏幕上绘制一些东西。但是,它有自己的主循环(与所有

也许“疯狂”这个词有点太强了,但我想问的是,是否有任何窗口工具包不让我这么做:

class MyApp(SomeWindowClass):
我真的不想使用一个由对对象如此着迷的人制作的库,他/她认为应用程序应该有一个类(只有一个实例,所以我不明白为什么有人会想额外键入)
(顺便说一句,我无意冒犯任何同意这些库设置方式的人,我只是想知道是否有任何东西可以少一点对象)

有。

Tkinter每个窗口/对话框有一个对象,而不是应用程序,并且不需要类就可以在屏幕上绘制一些东西。但是,它有自己的主循环(与所有其他GUI库一样)。世界你好:

from Tkinter import *
root = Tk()    
w = Label(root, text="Hello, world!")
w.pack()    
root.mainloop()

一般来说,GUI工具包依赖于运行某种形式的事件循环,这些工具包中的应用程序类通常负责该事件循环,并从底层窗口管理器封送事件。当然,他们可以调用EventLoopManager之类的类,但是您需要它,所以这只是一个命名问题。在某些情况下,虽然一些经常使用事件的工具包偶尔可以在没有事件的情况下使用,但您肯定不希望它成为某种自动的东西。

PyGTK另一个工具包;这是Gtk的python绑定。它结构良好,具有优秀的窗口和事件循环系统。 显示窗口的典型示例

import gtk
class Application:
    def __init__(self):
        self.window = gtk.GtkWindow(gtk.WINDOW_TOPLEVEL)
        self.window.show()

if __name__ == "__main__":
    app = Application()
    gtk.mainloop()
另一个建议是PyQt;这是Qt的python绑定。 典型的hello world示例是

    import sys
    from qt import *

    app = QApplication(sys.argv)
    myLabel = QLabel("Hello world!", None)
    app.setMainWidget(myLabel)
    myLabel.show()

    app.exec_loop()

PyQt和PyGtk广泛用于快速GUI开发。根据我的经验,与pyQt相比,pyGtk在在线文档/支持方面较差。但是这两个元素都是我的最爱。

正如上面的答案所示,GUI编程几乎总是高度面向对象的,这有很好的理由:图形元素在如何相互定位方面有很多共同点,关心鼠标指针是否在它们上面等等,Qt、Wx、Gtk等.CARSE的C++工具包已经在类/继承层次结构上结构化,因此Python包装也是不应该感到惊讶的。

如果您只需要简单的GUI元素,那么您可以考虑(简单消息框、文本编辑、选择)、(交互对象包装器,主要用于控制图形对象),它们每一个都解决了GUI交互的某些部分,而不显式地编写GUI代码。 为了在类似记录的结构中编辑字段的值,还可以研究GUI数据


PS:有各种图形工具可以让你设计GUI,并将一些事件链接在一起,例如QtDesigner,这可以帮助你避免很多繁琐的类定义代码。

好吧,我的邻居做了一个很棒的,但她是一个疯狂的猫女郎。所以我想我不会发布到它的链接。一切都是从基类
KittyKitty
派生出来的。你知道,这不是关于类型的问题,而是关于封装每次定义新应用程序时都不想编写的常见功能的问题。请参阅Katrina的答案,以获取有关此代码的提示。LOL。好问题。我以前对perl也有同样的感觉;-)+吉姆·布里松的职位。对于输入的这几个字符,您可以获得大量的功能。我不认为在中使用一个类来创建您自己的模块需要做很多工作,该类知道如何设置自己的窗口并对自己的客户端隐藏细节。只需创建一次,然后将所有程序都基于此。
Tkinter
是一个很好的例子,但它仍然需要实例化
Tk
类,因此您的“不需要类就可以在屏幕上绘制内容”是不正确的。无论如何,+1表示
Tkinter
Tkinter
允许您编写GUI,但不要求您定义新类。应用程序是使用
root=Tk()
创建的,而不是使用
类MyApp(SomeWindowClass):pass
。这是一种高度面向对象的方法。pygtk也可以,但仅限于gtk2。