pyqt5基本功能1.基本设置QWidget创建基本对象,Qwidget是pyat5界面的基类,调整窗口大小resize,move移动窗口,setWindowtitle设置标题 # 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。 app = QApplication(sys.argv) # QWidget部件是pyqt5所有用户界面对象的基类。他为QWidget提供默认构造函数。默认构造函数没有父类。 w = QWidget() # resize()方法调整窗口的大小。这离是250px宽150px高 w.resize(250, 150) # move()方法移动窗口在屏幕上的位置到x = 300,y = 300坐标。 w.move(300, 300) # 设置窗口的标题 w.setWindowTitle('Simple') # 显示在屏幕上 w.show() # 系统exit()方法确保应用程序干净的退出 # 的exec_()方法有下划线。因为执行是一个Python关键词。因此,exec_()代替 sys.exit(app.exec_()) 设置应用程序图标#设置窗口的图标,引用当前目录下的web.png图片self.setWindowIcon(QIcon('web.png')) 点击后关闭窗口qbtn = QPushButton('Quit', self)qbtn.clicked.connect(QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHintwbv 创建一个Pushbutton#创建一个PushButton并为他设置一个tooltipbtn = QPushButton('Button', self) btn.setToolTip('This is a <b>QPushButton</b> widget') 点击按钮 关闭窗口qbtn = QPushButton('Quit', self)qbtn.clicked.connect(QCoreApplication.instance().quit) 关闭窗口触发事件closeEvent该closeEvent方法会在窗口半闭的时候,自动调用 def closeEvent(self, event): reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() 显示在屏幕中心# 控制窗口显示在屏幕中心的方法defcenter(self): # 获得窗口 qr = self.frameGeometry() # 获得屏幕中心点 cp = QDesktopWidget().availableGeometry().center() # 显示到屏幕中心 qr.moveCenter(cp) self.move(qr.topLeft()) QGridLayout 表格布局definitUI(self):grid = QGridLayout() self.setLayout(grid) names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] positions = [(i, j) foriinrange(5) forjinrange(4)] forposition, nameinzip(positions, names): ifname == '': continue button = QPushButton(name) grid.addWidget(button, *position) self.move(300, 150) self.setWindowTitle('Calculator') self.show() Python zip() 函数把可迭代的对象做为参数,打包成一个个无组(a,b) python range()函数创建一个整数列晴,一般用在for循环中。 for i in range(10): print(i) for i in range(1,10): print(i) python布局2 , label, editdefinitUI(self):title = QLabel('Title') author = QLabel('Author') review = QLabel('Review') titleEdit = QLineEdit() authorEdit = QLineEdit() reviewEdit = QTextEdit() grid = QGridLayout() grid.setSpacing(10) grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) grid.addWidget(review, 3, 0) grid.addWidget(reviewEdit, 3, 1, 5, 1) self.setLayout(grid) self.setGeometry(300, 300, 350, 300) self.setWindowTitle('Review') self.show() 显示结果如下: 显示状态信息self.statusBar().showMessage('Ready')菜单创建菜单栏menubar,添加菜单addMenu,添加事件 addAction exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(qApp.quit) self.statusBar() # 创建一个菜单栏 menubar = self.menuBar() # 添加菜单 fileMenu = menubar.addMenu('&File') # 添加事件 fileMenu.addAction(exitAction) 事件和信号lcd = QLCDNumber(self)sld = QSlider(Qt.Horizontal, self) vbox = QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(sld) self.setLayout(vbox) sld.valueChanged.connect(lcd.display) sld滚动条的valueChange信号连接到lcd的display插槽 自定义一个信号绑定close事件class Communicate(QObject):closeApp = pyqtSignal() //定义一个信号 class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.c = Communicate() self.c.closeApp.connect(self.close) //信号绑定关闭事件 self.setGeometry(300, 300, 290, 150) self.setWindowTitle('Emit signal') self.show() def mousePressEvent(self, event): self.c.closeApp.emit() //鼠标按下的时候,触发信号发送 控件QCheckboxcb = QCheckBox('Show title', self) //创建一个复选框cb.toggle() //切换状态 cb.stateChanged.connect(self.changeTitle)//状态改变触发自定义函数changeTitle self.col = QColor(0, 0, 0)//初始黑颜色的值 redb = QPushButton('Red', self) //定义pushbutton关通过Setcheckable设置一个Togglebutton redb.setCheckable(True) redb.move(10, 10) redb.clicked[bool].connect(self.setColor)//clicked信号连接到用户自定义的方法 sld = QSlider(Qt.Horizontal, self) //创建一个水平滑块 sld.valueChanged[int].connect(self.changeValue)//交valueChaned信号 连接到片定义方法 self.pbar = QProgressBar(self)//创建进度条 self.timer = QtCore.QBasicTimer()//使用定时器来激活 self.timer.start(100, self)//启动一个计时器 cal = QCalendarWidget(self)//创建日历控件 cal.clicked[QDate].connect(self.showDate)//选择日期发生信号连接到showdate方法 qle = QLineEdit(self)//创建一个文本框 qle.textChanged[str].connect(self.onChanged)//文本框内容改变。会调用onchange topleft = QFrame(self) //设置框架 topleft.setFrameShape(QFrame.StyledPanel) combo = QComboBox(self) //创建下拉列表控件 combo.addItem("Ubuntu") combo.addItem("Mandriva") combo.activated[str].connect(self.onActivated) //选中条目,连接到onActivated方法 if e.buttons() != Qt.RightButton: //判断是否是鼠标右击 mimeData = QMimeData() drag = QDrag(self) //创建拖放对象 drag.setMimeData(mimeData) drag.setHotSpot(e.pos() - self.rect().topLeft()) def dropEvent(self, e): //释放鼠标右键,移到指定位置 position = e.pos() self.button.move(position) e.setDropAction(Qt.MoveAction) e.accept() qp = QPainter() //QPainter负责绘制,begin()开始,end()结束,真正的绘制让drawtext来做 qp.begin(self) self.drawText(event, qp) qp.end() qp.setPen(Qt.red)//设置画笔为红色 qp.drawPoint(x, y)//画点 def drawPoints(self, qp)://具体方法 qp.setPen(Qt.red) size = self.size() for i in range(1000): x = random.randint(1, size.width() - 1) y = random.randint(1, size.height() - 1) qp.drawPoint(x, y) qp.setBrush(QColor(200, 0, 0)) //画一个带颜色的矩形 pen = QPen(Qt.black, 2, Qt.SolidLine) //创建一个黑色,2像素,SolidLine的钢笔对象 qp.setPen(pen) qp.drawLine(20, 40, 250, 40) //画线 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:爱码农爱生活,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |