码迷,mamicode.com
首页 > 其他好文 > 详细

No.3 PyQt学习

时间:2017-10-17 21:47:39      阅读:1367      评论:0      收藏:0      [点我收藏+]

标签:移动   round   char   dial   gui   pre   class   中间   show   

使用box布局,写了 一个系统的主页(非常丑)

技术分享

代码如下:

# -*- coding: utf-8 -*-
import sys

from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Home(QMainWindow):

    def __init__(self):
        super(Home, self).__init__()
        #QtGui.QWidget.__init__(self)
        self.style = """ 
                        QPushButton{background-color:grey;color:white;} 
                        #window{ background:pink; }
                        #test{ background-color:black;color:white; }
                    """
        self.setStyleSheet(self.style)
        self.initUI()

    def initUI(self):

        self.resize(650, 480)
        self.statusBar().showMessage(Ready)
        self.setObjectName("window")
        self.center()

        widget = QWidget()
        label = QLabel()
        label.setText("<font size=%s><B>%s</B></font>" %("13", "Face Recognition System"))
        start = QPushButton("Start", self)
        start.setToolTip(Start to Recognition)
        start.resize(50, 25)
        quit = QPushButton("Quit", self)
        quit.resize(50,25)
        quit.setToolTip(Exit Application)
        #self.connect(quit, QtCore.SIGNAL(‘clicked()‘), QtGui.qApp, QtCore.SLOT(‘quit()‘))
        quit.clicked.connect(self.quitClick)

        vbox1 = QVBoxLayout()  # 垂直布局
        vbox2 = QVBoxLayout()
        vbox3 = QVBoxLayout()
        label1 = QLabel()
        label1.resize(50,50)
        vbox1.addWidget(label1)
        vbox2.addWidget(label)
        vbox2.addWidget(start)
        vbox2.addWidget(quit)
        label2 = QLabel()
        label2.resize(50, 50)
        vbox3.addWidget(label2)
        hbox = QHBoxLayout()
        hbox.addLayout(vbox1)
        hbox.addLayout(vbox2)
        hbox.addLayout(vbox3)
        widget.setLayout(hbox)

        self.setCentralWidget(widget)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
            QApplication.postEvent(self, QEvent(174))
            event.accept()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            self.move(event.globalPos() - self.dragPosition)
            event.accept()

    def quitClick(self):
        reply = QMessageBox.question(self, Message,
                                           Are you sure to quit?, QMessageBox.Yes,
                                           QMessageBox.No)
        if reply == QMessageBox.Yes:
            quit()

    def center(self):
        qr = self.frameGeometry()  # 得到该主窗口的矩形框架qr
        cp = QDesktopWidget().availableGeometry().center()  # 屏幕中间点的坐标cp
        qr.moveCenter(cp)  # 将矩形框架移至屏幕正中央
        self.move(qr.topLeft())  # 应用窗口移至矩形框架的左上角点

    def closeEvent(self, event):

        reply = QMessageBox.question(self, Message,
                                           Are you sure to quit?, QMessageBox.Yes,
                                           QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

def main():
    app = QApplication(sys.argv)
    main = Home()
    main.show()
    sys.exit(app.exec_())


if __name__ == __main__:
    main()

布局看起来有点不协调,对其进行了调整如下:

 技术分享

界面可以自由放缩,也可进行移动,具体代码如下:

# -*- coding: utf-8 -*-
import sys

from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Home(QMainWindow):

    def __init__(self):
        super(Home, self).__init__()
        #QtGui.QWidget.__init__(self)
        self.style = """ 
                        QPushButton{background-color:grey;color:white;} 
                        #window{ background-image: url(background1.jpg); }
                        #test{ background-color:black;color:white; }
                    """
        self.setStyleSheet(self.style)
        self.initUI()

    def initUI(self):

        self.resize(650, 480)
        self.statusBar().showMessage(Ready)
        self.setObjectName("window")
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
        self.center()

        widget = QWidget()
        label = QLabel()
        label.setText("<font size=%s><B>%s</B></font>" %("15", "Face Recognition System"))
        start = QPushButton("Start", self)
        widget.setStatusTip(  )
        start.resize(50, 25)
        quit = QPushButton("Quit", self)
        quit.resize(50,25)

        #start.clicked.connect(self.startClicked)
        quit.clicked.connect(self.quitClicked)

        vbox1 = QVBoxLayout()  # 垂直布局
        vbox2 = QVBoxLayout()
        vbox3 = QVBoxLayout()
        vbox4 = QVBoxLayout()

        #两边空隙填充
        label1 = QLabel()
        label1.resize(50,50)
        label2 = QLabel()
        label2.resize(50, 50)
        vbox1.addWidget(label1)
        #vbox2.addWidget(label)
        vbox4.addWidget(start)
        vbox4.addWidget(quit)
        vbox3.addWidget(label2)
        # 按钮两边空隙填充
        label3 = QLabel()
        label3.resize(50, 50)
        label4 = QLabel()
        label4.resize(50, 50)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(label3)
        hbox1.addLayout(vbox4)
        hbox1.addWidget(label4)
        #标题与两个按钮上下协调
        label5 = QLabel()
        label5.resize(1, 1)
        label6 = QLabel()
        label6.resize(1, 1)
        label7 = QLabel()
        label7.resize(1, 1)
        vbox2.addWidget(label5)
        vbox2.addWidget(label)
        vbox2.addWidget(label6)
        vbox2.addLayout(hbox1)
        vbox2.addWidget(label7)

        hbox = QHBoxLayout()
        hbox.addLayout(vbox1)
        hbox.addLayout(vbox2)
        hbox.addLayout(vbox3)
        widget.setLayout(hbox)

        self.setCentralWidget(widget)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
            QApplication.postEvent(self, QEvent(174))
            event.accept()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            self.move(event.globalPos() - self.dragPosition)
            event.accept()

    def quitClicked(self):
        reply = QMessageBox.question(self, Warning,
                                           Are you sure to quit?, QMessageBox.Yes,
                                           QMessageBox.No)
        if reply == QMessageBox.Yes:
            quit()

    def center(self):
        qr = self.frameGeometry()  # 得到该主窗口的矩形框架qr
        cp = QDesktopWidget().availableGeometry().center()  # 屏幕中间点的坐标cp
        qr.moveCenter(cp)  # 将矩形框架移至屏幕正中央
        self.move(qr.topLeft())  # 应用窗口移至矩形框架的左上角点


def main():
    app = QApplication(sys.argv)
    main = Home()
    main.show()
    sys.exit(app.exec_())


if __name__ == __main__:
    main()

 

 

也可以使用QtDesigner进行页面设计。PyCharm和QtDesigner的配置可以百度到,具体设计过程参照http://www.cnblogs.com/dcb3688/p/4311138.html。

 

No.3 PyQt学习

标签:移动   round   char   dial   gui   pre   class   中间   show   

原文地址:http://www.cnblogs.com/farewell-farewell/p/7681020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!