Hello QT(译)
简评:PySide2 是 QT 官方出品,值得期待
PySide2 第一个技术预览版快要发布了,在此给出一个简单的例子,来展示它将如何打开 Python世界的大门。
下面我们将使用 QWidgets 构建一个简单的应用来展示 PySide2 的简洁性,每个脚本都具有或多或少相同的结构:
创建一个 QApplication
然后包含所有想要使用的 QWidgets 和结构(例如 QLabel)
显示应用程序并启动 QApplication
放在一起,将会是这样的东西:
# hello_world.py
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication([])
label = QLabel("Hello Qt for Python!")
label.show()
app.exec_()
使用 python hello_world.py 命令就可以执行这段脚本。但这不是全部,真正的问题是:如何访问 Qt 类的方法?为了简化这个过程,我们保留了 Qt API,例如,如果我们想要指定一个 QLabel 的大小,在 C++ 中我们会这样写:
QLabel *label = new QLabel();
label->setText("Hello World!");
label->resize(800, 600);
使用 PySide2 的写法是:
label = QLabel()
label.setText("Hello World!")
label.resize(800, 600)
现在我们知道了 C++ 的等价写法,就可以编写更复杂的应用程序。
import sys
import random
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (QApplication, QWidget,
 QPushButton, QLabel, QVBoxLayout)
class MyWidget(QWidget):
 def __init__(self):
 QWidget.__init__(self)
 self.hello = ["Hallo welt!", "Ciao mondo!",
 "Hei maailma!", "Hola mundo!", "Hei verden!"]
 self.button = QPushButton("Click me!")
 self.text = QLabel("Hello World")
 self.text.setAlignment(Qt.AlignCenter)
 self.layout = QVBoxLayout()
 self.layout.addWidget(self.text)
 self.layout.addWidget(self.button)
 self.setLayout(self.layout)
 self.button.clicked.connect(self.magic)
 def magic(self):
 self.text.setText(random.choice(self.hello))
if __name__ == "__main__":
 app = QApplication(sys.argv)
 widget = MyWidget()
 widget.resize(800, 600)
 widget.show()
 sys.exit(app.exec_())
如果你还不熟悉 Qt 开发,那么扩展某个类并将其改写以适应我们的需求是一种常见做法,在上面的例子中,我们使用 QWidget 作为基类,并包含了一个 QLabel 和 QPushButton。
该应用非常简单:
- 首先,我们编写包含许多种语言的 Hello World 的写法的列表。
- 然后,我们用一定的对齐,字体和大小初始化一个 QPushButton 和一个 QLabel。
- 之后,我们创建一个 QVBoxLayout 来包含我们的对象,并将其分配给我们的类。
- 最后,我们将 QPushButton 的 clicked() 信号连接到我们称为 magic 的方法。
- 因此,每次点击按钮,我们都会以随机语言获得 Hello World!
这个简单的脚本的结构将成为大多数使用 Pyside2 的应用程序的基础。
Hello QT(译)的更多相关文章
- Qt浅译:JSON Support in Qt(JSON只有六种数据类型)
		JSON Support in Qt Qt5之后开始提供对处理JSON数据的支持,JSON是一种Interter数据交换的数据格式. JSON 用于存储结构化的数据,JSON有6种基本数据类型 ... 
- Qt——容器类(译)
		注:本文是我对Qt官方文档的翻译,错误之处还请指正. 原文链接:Container Classes 介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变 ... 
- qt 4.6.2 与visual studio 2005 集成(编译方法,以及中间遇到的问题)
		不知不觉在蒂森差不多半个月了,哈哈,时间过得很快,过得很充实,近来研究QT,首先嘛,肯定要学会安装了,这最基础的不会更不用说下面的啦.闲话少说,进正题,基本的安装步骤网上多的是,但参考一个大多数情况是 ... 
- QT静态编译
		Qt静态编译(链接)和动态编译区别 Qt的静态编译译(其实应该叫链接,不是编译),将各模块编译成静态库,这样在编译自己写的Qt程序时,会将这些静态库编译(链接)到你的EXE文件中去的.Qt的动态编译, ... 
- 用QT 还是MFC ? (转)
		我曾经使用过QT和MFC来开发过软件,我想和大家分享我使用他们时所体会的不同之处. 我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰.但是,我在这里是用我自己的语言来表达我自 ... 
- MFC和Qt优缺点
		在网上看到的,拿来和大家一起讨论下. 我曾经使用过来开发过软件,我想和大家分享我使用他们时所体会的不同之处. 我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰.但是,我在这里 ... 
- 迁移到MSYS2 与 Qt 工具链注意的几个事情(注意链接顺序,并且人造mingw工具链所没有的局部midl.exe命令)
		Microsoft Visual Studio 2015社区版提供了强大的开发体验,且 Qt 提供了预编译版本.然而,由于客户提出兼容Windows XP ~ Windows 8.1 这样宽泛的环境要 ... 
- Qt入门之基础篇(1):Qt4及Qt5的下载与安装
		转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ... 
- 收藏的博客 -- Qt/C++学习
		Qt Creator环境: 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和调试(一台电脑有桌面系统,一台电脑无桌面系统) 使用Qt Creator作为Li ... 
随机推荐
- 104. Maximum Depth of Binary Tree (Tree; DFS)
			Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ... 
- 32. Longest Valid Parentheses (Stack; DP)
			Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ... 
- Hibernate多对多操作
			---------------------siwuxie095 Hibernate 多对多操作 以用户和角色为例 (一)多对多映射配置 第一步:创建两个实体类,用户和角色 第二步:让两个实体类之间互相 ... 
- 注意for循环中变量的作用域-乾颐堂
			1 2 for e in collections: pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循 ... 
- razor DisplayNameFor ViewModel为集合时显示列名的问题
			@{ViewModel nullModel = null; } @Html.DisplayNameFor(model => nullModel .FullName) https://stacko ... 
- LWIP网络接口管理
			LAN8720+RJ45+MAC(STM32F4自带的)构成了网络接口层. 
- 1045 Bode Plot
			题目链接:http://poj.org/problem?id=1045 一道数学物理题, 推理公式:http://www.cnblogs.com/rainydays/archive/2013/01/0 ... 
- nginx与tomcat 组合 实现静态文件和jsp组合访问
			主要修改nginx的配置文件: 设置代理 location /{proxy_pass http://47.94.158.2:8080;proxy_redirect off;proxy_set_head ... 
- CodeForces 339B Xenia and Ringroad(水题模拟)
			题意:给定 n 个地方,然后再给 m 个任务,每个任务必须在规定的地方完成,并且必须按顺序完成,问你最少时间. 析:没什么可说的,就是模拟,记录当前的位置,然后去找和下一个位置相差多长时间,然后更新当 ... 
- 创建EDM
			在学习linq过程中,我们难免会要创建EDM,这里简单的介绍一下EDM的创建过程 图示如下: 1.右击→添加→新建项→数据→Ado.net实体数据模型 选择适当的数据库,表后点击完成,vs中会自动生成 ... 
