也许我会跳到最深处,但我会试一试。
以下是Tkinter的一些有用功能:
Tkinter Canvas
小部件是面向对象的绘图画布。绘图的元素本身就是小部件,因为它们可以被移动,修改,并且绑定到事件。
Tkinter使用绑定来触发回调。该事件作为字符串传递。可以使用event_generate
轻松创建自定义事件。
Tkinter使用after
方法,等待指定的时间而不冻结GUI。
Tkinter预先定义了TkDefaultFont
等字体,以及systemButtonFace
等颜色,这些字体取决于系统。
我的问题是:
这些功能的pyQt等价物(尤其是粗体功能)是什么?
如何将窗口小部件的元素(例如,仅检查按钮的标签)“绑定”到事件?
答案 0 :(得分:1)
在Qt和PyQt中,事件被称为信号,您使用插槽(docs here)绑定它们。一般来说,您使用@
装饰器定义了一个插槽。
class WindowImpl (QtGui.QMainWindow, Ui_TremorMain, Ui_Graphs):
def __init__ (self, buffer, parent = None, configuration = None):
# do some initialisation here (not GUI setup however)
@QtCore.pyqtSlot(int, name="on_confSelectorCombo_currentIndexChanged")
def confChanged (self, newConf):
# do some stuff here to handle the event
上述内容将在名为currentIndexChanged
的对象的confSelectorCombo
事件中触发。 confSelectorCombo
的设置在GUI构建器或Qt Creator
中完成,因为诺基亚决定调用它。这就是您想要开始使用的内容。有关使用Qt Creator的教程here。显然,你需要浏览文档,看看哪些小部件发出了什么信号。
至于我所知道的字体内容是docs上的内容:
If you have not set a font for your application then the default font on your
machine will be used, and the default font can be different on different
machines. On Windows the default Windows font is used, on X11 the one in qtrc
can be used. If a default font can’t be found, then a font specified by Qt
will be used.
QStyleSheet
和QStyle
充当代理,用于更改小部件的外观(QStylesheet,QStyle)。
至于等待应用程序,我找到了this
QTime dieTime = QTime::currentTime().addSecs(2);
while( QTime::currentTime() < dieTime ):
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
还有QThread.sleep()
(docs),具体取决于您想要的效果类型。也许还值得研究Qt docs
总体而言,在查找有关如何在PyQt中执行操作的信息时,我发现查看Qt文档然后在Python中编写内容非常有用。 10次中有9次有效。另一方面,它可能也值得研究另一个python Qt库PySide。我之前没有使用过它,因为它之前已经在使用过,但我注意到它们已经发布了1.0.6版本。
<强>更新强>
为了重申下面的Luke Woodward,您可以使用QGraphicsScene
和QGraphicsView
以面向对象的方式呈现内容。 QGraphicsScene
实际上并不渲染它只是一个场景图,QGraphicsView
然后用于渲染场景图的内容。对于低级别绘图还有QPainter
- 有一个基本的绘图教程here。同样值得看QGraphicsItem
这是所有图形项目的基础和
includes defining the item's geometry, collision detection, its painting
implementation and item interaction through its event handlers
docs here。 Context2D
提供了一个HTML画布(如果我没有误用WebKit)。画布本身只有一个更改的插槽,但是您放在画布上的任何对象将/可以有更多的插槽。在Context2D
和Context2DCanvas
here上有一个相当完整的教程。为了解释为什么有这么多不同的渲染方式,你将不得不问别人。我的两分钱是因为Qt应该可以在任何地方运行,而奇趣科技和后来的诺基亚想要提供很多选择。幸运的是,文档非常好。