#面向对象方法
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessageBox #窗口组件
from PyQt5.QtWidgets import QDesktopWidget #提供桌面窗口信息
from PyQt5.QtGui import QIcon, QFont #图标组件,提示框
from PyQt5.QtCore import QCoreApplication class Example(QWidget): #创建一个新类叫做Example,Example类继承自QWidget类。QWidget组件(类)是PyQt5中所有用户界面类的基础类。 def __init__(self):
super().__init__() #super()使得Example可以使用其父类QWidget的方法
self.initUI() '''界面主体'''
def initUI(self):#initUI()中的下述方法(如'.setblabla')都继承自QWidgets类。 QToolTip.setFont(QFont('SansSerif',8))#这句管理了所有的提示框。静态方法设置了提示框字体的格式,8px大小的SansSerif字体
self.setToolTip('This is a <b>QWidget</b> widget')#调用setToolTip方法创建提示框,提交给了self对象。提示框中可以使用富文本格式 #self.setGeometry(300,300,800,540)#在屏幕上显示窗口,并设置其尺寸。前两个参数设定位置,后两个设定宽高。相当于是'.resize()'+'.move()'。
'''
这里的'.setGeometry()'方法,不能让窗口居中显示,因为它需要具体的数值。
我们可以使用下面的'.resize()'与'.center()'方法来实现修改窗口尺寸和居中显示。
'''
self.resize(800,540)
self.center() self.setWindowTitle('Ubuntu')#标题
self.setWindowIcon(QIcon('linuxcartoon.jpg'))#QIcon对象接收图片。 btn = QPushButton(QIcon('linuxcartoon.jpg'),'A Linux',self)#创建一个按钮组件btn,可以指定图标、文本和父对象
btn.setToolTip('This is a <b>QPushButton</b> widget')#给btn设置一个提示框,富文本<b>指加粗。
btn.resize(btn.sizeHint())#改变btn的大小,'.sizeHint()'返回了一个系统推荐值
btn.move(50,50)
btn.clicked.connect(self.msg)#链接按钮触发事件msg qbtn = QPushButton('Quit',self)#第二个参数是父组件。父组件是Example组件,它继承了QWiget类。
qbtn.setToolTip('It\'s a button that means <b>quitting</b> this Ubuntu window')
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(200,50) self.show() '''窗口位置方法'''
def center(self):
qr = self.frameGeometry()#这里我们获得一个主窗口轮廓的几何图形。
'''
一些补充:
geometry.width():客户区的宽度,客户区:不包括标题栏、边框
geometry.height():客户区的高度
frameGeometry.x():窗口轮廓整个框架左上角的坐标x,整个框架:包括边框和标题栏
frameGeometry.y():窗口轮廓整个框架左上角的坐标y
frameGeometry.width():窗口全框架宽度
frameGeometry.height():窗口全框架高度 '''
cp = QDesktopWidget().availableGeometry().center()
#QDesktopWidget()获取桌面框架,'.availableGeometry()'获得相对于显示器的绝对值,'.center()'获取屏幕中心点。
qr.moveCenter(cp)#把qr轮廓框架的中心点移动到cp点(桌面屏幕中心点)
self.move(qr.topLeft())#把self窗口(左上角)移动到qr的topLeft左上角,实现重合。'.move()'方法默认以左上角为基点移动。
#self.move(qr.x(),qr.y())这一句和上一句相同效果,'x(),y()'指左上角的坐标。 '''按键方法'''
def msg(self):
reply = QMessageBox.information(self,'Linux',"An operating system. ", QMessageBox.Ok | QMessageBox.Cancel, QMessageBox.Ok) def about(self):#QMessageBox.about消息框只有一个按键'OK','.about'所需参数是(QWidget, str, str),图标是本身这个btn按键的图标。
reply = QMessageBox.about(self,'About Linux',"Something about Linux. ") def closeEvent(self, event): #当我们关闭一个QWidget,QCloseEvent类事件将会生成。如果要实现关闭前的动作,我们需要修改closeEvent()方法。
reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)#最后一个参数QMessageBox.No指跳出qusetion框后默认选择No
#QMessageBox::Information、Warning、Critical、Question四种消息框自带图标。若想它们中自定义Icon,只能重写QMessageBox方法,见文末。
if reply == QMessageBox.Yes:
event.accept() #这里是值,点下右上角的X之后,"关闭Widget"就成了方法参数中的event。
else: #在这里进行一次question的选择,并把选择结果赋值给reply。如果reply为Yes则event.accept()运行,反之就ignore这个event。
event.ignore() if __name__ == '__main__':
app = QApplication(sys.argv)#所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。 ex = Example()#需要ex来实例化,使用上面的函数
sys.exit(app.exec_())
'''
app.exec_()使得程序可以一直循环运行,直到主窗口被关闭或被终止进程(如果没有这句话,程序运行时会一闪而过)
主循环将在下面两种情况下退出:(1)调用exit()方法,(2)主widget组件被销毁。
sys.exit()可以做到退出时系统不留垃圾,且系统环境将会被通知应用是怎样被结束的。
exec_()方法有一个下划线,是因为exec是Python保留的关键字,所以用exec_()来代替。
''' #未完成
'''@@@尝试写一个继承了QMessageBox的方法,使它能自定义图标
class QMessageBox_question(QMessageBox):
def __init__(self):
super().__init__()
self.AddIcon()
def AddIcon(): 当QMessageBox中的元素不能够满足需求时,可以有两种方法。
1)声明一个类,从QMessageBox继承而来。然后在其中添加绘制等操作。详见网上另一篇博客:https://www.xuebuyuan.com/896335.html
2)自定义一个类,其中包含对QMessageBox的更丰富操作:https://blog.csdn.net/liang19890820/article/details/50586031
'''

源代码from:http://zetcode.com/gui/pyqt5/

中文翻译:https://www.cnblogs.com/archisama/p/5444032.html

  • 不知为何代码只能在命令行窗口里运行。我使用的Windows PowerShell。
  • 效果如下↓

PyQt5(1)——QToolTip, QPushButton, QMessageBox, QDesktopWidget的更多相关文章

  1. Python——pyqt5——消息框(QMessageBox)

    一.提供的类型 QMessageBox.information 信息框 QMessageBox.question 问答框 QMessageBox.warning 警告 QMessageBox.ctit ...

  2. PyQt5 入门

    换了VSCODE开发,感觉比sublime好点,可能是由于第三版老弹框烦人吧.VSCODE看着也挺好看的. 学习 PyQt5 中文教程 0. 安装完之后错误 pip 安装了 pyqt5 from Py ...

  3. Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)

    PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...

  4. PyQt5之窗口类型

    [TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 本文的主要内容:PyQt中的窗口部件:QMainWindow,QWidget,QDialog. 上述三 ...

  5. 二、PyQt5基本功能和操作入门

    在这里,我将根据自己的学习历程从初级到高级介绍pyqt5.因为是学到哪里就写道哪里,所以内容排版比较随意.有两点问题需要先说明: 1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以 ...

  6. python ui学习过程,使用pyqt5实现

    首先安装pyqt5的包,然后打开notebook就可以编写了.当然这样编写,也可以用designer进行. 它是pyqt5-tools的一个exe软件,\Anaconda3\Lib\site-pack ...

  7. PyQt5教程——第一个程序(2)

    用PyQt5写的第一个程序 在这篇PyQt5教程中,我们可以学习一些PyQt5的基础应用. 简单的例子 这是一个显示一个小窗口的简单例子.我们可以做许多这样的窗口.我们可以调整它的窗口尺寸,最大化或最 ...

  8. PyQt5初识

    学习PyQt5是个机缘,那是因为我的linux16.04+python3.6使了浑身解数也装不上PyQt4! PyQt5的官方文档貌似是要钱的!又想快速了解这个东东,我还是借鉴了万能的博客园大佬博主: ...

  9. pyqt5 -——基本功能(HelloWorld)

    一. 简单窗口 这个简单的小例子展示的是一个小窗口.但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现.这在很多应用中很常见,没必要每次都要重写这部分代码,Qt ...

随机推荐

  1. Ubuntu-apt安装Jenkins

    系统环境: Ubuntu 16.0.4 2CPU,8G 1.默认Ubuntu软件包里没有Jenkins 2.系统里添加存储密钥 wget -q -O - https://pkg.jenkins.io/ ...

  2. C#中MessageBox用法大全(附效果图)<转>

    我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...

  3. python学习之结构语句

    一 循环语句: 1.1 for x in rang(n) :#rang(n)生成左闭右开区间的序列 1.2 while x 条件n: 二条件语句: if 条件表达式: elif 表达式: elif 表 ...

  4. Spark Mllib里数据集如何取前M行(图文详解)

    不多说,直接上干货! 见具体, Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类StumbleUpon数据集 见具体 Hadoop+Spark大 ...

  5. js js弹出框、对话框、提示框、弹窗总结

    js弹出框.对话框.提示框.弹窗总结 一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...

  6. [转]如何降低SQL Server 内存使用率

    我的数据库服务器内存为8G,现在资源管理器显示内存用到5G,可以肯定是sql server数据库吃内存原因. MSSQL占用了太多的内存,而且还不断的增长:或者说已经设置了使用内存,可是它没有用到那么 ...

  7. 2840 WIKIOI——评测

    2840 WIKIOI——评测 时间限制: 1 s 空间限制: 2000 KB 题目等级 : 白银 Silver       题目描述 Description Wikioi上有一题有N个测试点,时限为 ...

  8. Java类的静态块の二

    在上一篇Java类的静态块の一中介绍到:类的静态块在类加载时候执行,执行早于构造函数,并且只执行一次. 但是在下面的例子中却发现JVM并不是把把所有的static模块都执行完成再执行其他(Java果然 ...

  9. win10下vs2013为程序集新建强名称文件时“未能完成操作。拒绝访问”的解决方案

    昨日,在使用vs2013开发开发一个小工具,打算给这个小工具的源代码进行保护. 在输入完成建立强名称密钥文件时,爆出了如下错误: 一开始以为是项目所在路径的权限问题,于是给项目所在路径文件夹添加了“U ...

  10. HTML iframe框架

    iframe 作用: 就是在一个网页插入一个小窗口   窗口里面也是一个网页 <a href="http://www.baidu.com" target="da1& ...