找回密码
 立即注册
Qt开源社区 门户 查看内容

Pyqt5常用功能及介绍

2019-9-11 09:04| 发布者: admin| 查看: 1519| 评论: 0

摘要: pyqt5基本功能1.基本设置QWidget创建基本对象,Qwidget是pyat5界面的基类,调整窗口大小resize,move移动窗口,setWindowtitle设置标题# 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令 ...
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并为他设置一个tooltip
btn = 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, edit

definitUI(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() //鼠标按下的时候,触发信号发送

控件QCheckbox

cb = 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。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了