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()

显示在屏幕中心

# 控制窗口显示在屏幕中心的方法
def center(self):
    # 获得窗口
    qr = self.frameGeometry()
    # 获得屏幕中心点
    cp = QDesktopWidget().availableGeometry().center()
    # 显示到屏幕中心
    qr.moveCenter(cp)
    self.move(qr.topLeft())

QGridLayout 表格布局

def initUI(self):

    grid = QGridLayout()
    self.setLayout(grid)

    names = ['Cls', 'Bck', '', 'Close',
             '7', '8', '9', '/',
             '4', '5', '6', '*',
             '1', '2', '3', '-',
             '0', '.', '=', '+']

    positions = [(i, j) for i in range(5) for j in range(4)]

    for position, name in zip(positions, names):

        if name == '':
            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

def initUI(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()

显示结果如下:

1568008843199

显示状态信息

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) //画线

本文由 hcb 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论