Python3 :PyCharm + Qt designer 學習 + 實例

猝然臨之而不驚,無故加之而不怒

—- 蘇軾 《留侯論》

一、PyQt5 簡單介紹

  1. PyQt是由Phil Thompson 開發
  2. Qt庫是目前最強大的庫之一
  3. PyQt是一個創建GUI應用程序的工具包
  4. 它是Python編程語言和Qt庫的成功融合

Qt designer 可視化拖動生成界面,然後利用pycharm 進行轉換 .py 文件,再編寫槽函數,實現進一步的功能,不要說太方便了。

二、第一個窗口

2.1 qt designer 第一個窗口

# pycharm生成的Python代碼

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'window.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        Form.setStyleSheet("background-color: rgb(85, 170, 255);")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(110, 40, 171, 41))
        self.label.setStyleSheet("color: rgb(170, 85, 255);\n"
"font: 14pt \"楷體\";")
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "qt designer 窗口"))


# 主函數代碼(基本通用)

if __name__=='__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    ui = Ui_Form()  #類名
    ui.setupUi(widget)
    widget.show()
    sys.exit(app.exec_())

結果顯示

這裏寫圖片描述

說明

設計 顏色及字體 位置

這裏寫圖片描述
這裏寫圖片描述

2.2 Python編寫的第一個窗口 1

import sys
from PyQt5.QtWidgets import QApplication, QWidget  #導入必要的組件
if __name__ == '__main__':
    app = QApplication(sys.argv)   #每一個程序都要建立一個,相當於一個畫布,其他組件可以在上面畫,放置,是一個父組件 sys.argv用來表示可以用命令行運行代碼
    w = QWidget()       #建立一個窗口
    w.resize(400, 300)  #重置爲大小400,300大小的窗口
    w.move(500, 200)    #移動到x=500,y=200這個桌面的座標上
    w.setWindowTitle('window') #設置窗口的標題
    w.show()            #顯示它,如果沒有這句話,前面做的工作就沒法看到,只是存進了內存裏
    sys.exit(app.exec_()) #關閉程序,沒有這句就只能強制關閉程序了,app.exec_(),只有這個好像也可以成功,可能是需要讓程序知道進程都已經釋放了吧

2.3 Python編寫的第一個窗口 2

#一個應用圖標 + 背景顏色或圖片
import sys
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
import login
#Example類是從QWidget類繼承下來的.
class Example(QWidget):
    def __init__(self):
        super().__init__() #.super()方法返回的是Example類的父對象
        self.initUI()

    #GUI的創建是委託給initUI()方法的.
    def initUI(self):
        #這三個方法都是繼承於QWidget類
        self.setGeometry(500, 200, 400, 300) #.setGeometry()方法做兩件事:定位窗口在屏幕上的位置和設置它的大小\\.前面兩個參數是窗口的x和y軸位置.第三個參數是窗口的寬,第四個參數是窗口的高
        self.setWindowTitle('Icon')   #設置應用程序的圖標和主題
        self.setWindowIcon(QtGui.QIcon('A.jpg'))
        palette1 = QtGui.QPalette()
        #palette1.setColor(self.backgroundRole(), QtGui.QColor(85, 170, 255))   # 設置背景顏色
        palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('2.jpg')))   # 設置背景圖片
        self.setPalette(palette1)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

結果顯示

應用圖標

這裏寫圖片描述

背景顏色

這裏寫圖片描述

背景圖標

這裏寫圖片描述

三、跳轉窗口


from PyQt5 import QtCore, QtGui, QtWidgets
import window #要跳轉的界面名字

#除備註外,均爲Qt designer製作界面pycharm生成的代碼

class Ui_login_2(object):
    def setupUi(self, login_2):
        login_2.setObjectName("login_2")

        self.log = login_2 #這行 編寫跳轉函數所需

        login_2.resize(646, 504)
        login_2.setStyleSheet("background-color: rgb(0, 95, 155);")
        self.name_label = QtWidgets.QLabel(login_2)
        self.name_label.setGeometry(QtCore.QRect(120, 160, 91, 31))
        font = QtGui.QFont()
        font.setFamily("華文中宋")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.name_label.setFont(font)
        self.name_label.setStyleSheet("font: 12pt \"華文中宋\";\n"
"color: rgb(255, 255, 255);")
        self.name_label.setObjectName("name_label")
        self.pw_label = QtWidgets.QLabel(login_2)
        self.pw_label.setGeometry(QtCore.QRect(140, 230, 71, 31))
        font = QtGui.QFont()
        font.setFamily("華文中宋")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.pw_label.setFont(font)
        self.pw_label.setStyleSheet("font: 12pt \"華文中宋\";\n"
"color: rgb(255, 255, 255);")
        self.pw_label.setObjectName("pw_label")
        self.pw_line = QtWidgets.QLineEdit(login_2)
        self.pw_line.setGeometry(QtCore.QRect(230, 230, 251, 41))
        self.pw_line.setStyleSheet("color: rgb(0, 0, 0);\n"
"background-color: rgb(255, 255, 255);\n"
"border-color: rgb(87, 0, 130);")
        self.pw_line.setObjectName("pw_line")
        self.name_line = QtWidgets.QLineEdit(login_2)
        self.name_line.setGeometry(QtCore.QRect(230, 150, 251, 41))
        self.name_line.setStyleSheet("color: rgb(0, 0, 0);\n"
"background-color: rgb(255, 255, 255);\n"
"border-color: rgb(87, 0, 130);")
        self.name_line.setObjectName("name_line")
        self.checkBox = QtWidgets.QCheckBox(login_2)
        self.checkBox.setGeometry(QtCore.QRect(180, 300, 241, 20))
        font = QtGui.QFont()
        font.setFamily("華文中宋")
        font.setPointSize(10)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.checkBox.setFont(font)
        self.checkBox.setStyleSheet("font: 10pt \"華文中宋\";\n"
"color: rgb(255, 255, 255);")
        self.checkBox.setObjectName("checkBox")
        self.login = QtWidgets.QPushButton(login_2)
        self.login.setGeometry(QtCore.QRect(160, 370, 131, 51))
        font = QtGui.QFont()
        font.setFamily("華文中宋")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.login.setFont(font)
        self.login.setStyleSheet("font: 12pt \"華文中宋\";\n"
"color: rgb(255, 253, 222);\n"
"background-color: rgb(0, 66, 200);\n"
"border-color: rgb(87, 0, 130);")
        self.login.setObjectName("login")
        self.register_2 = QtWidgets.QPushButton(login_2)
        self.register_2.setGeometry(QtCore.QRect(360, 370, 121, 51))
        self.register_2.setStyleSheet("font: 12pt \"華文中宋\";\n"
"color: rgb(255, 253, 222);\n"
"background-color: rgb(0, 66, 200);\n"
"border-color: rgb(87, 0, 130);")
        self.register_2.setObjectName("register_2")
        self.label = QtWidgets.QLabel(login_2)
        self.label.setGeometry(QtCore.QRect(-10, 0, 661, 81))
        font = QtGui.QFont()
        font.setFamily("微軟雅黑")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.label.setFont(font)
        self.label.setStyleSheet("font: 75 12pt \"微軟雅黑\";\n"
"color: rgb(255, 255, 255);\n"
"background-color: rgb(0, 85, 155);")
        self.label.setObjectName("label")
        self.frame = QtWidgets.QFrame(login_2)
        self.frame.setGeometry(QtCore.QRect(0, 440, 631, 71))
        self.frame.setStyleSheet("background-color: rgb(0, 85, 155);")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label_2 = QtWidgets.QLabel(self.frame)
        self.label_2.setGeometry(QtCore.QRect(200, 10, 241, 41))
        self.label_2.setStyleSheet("color: rgb(255, 255, 255);\n"
"font: 10pt \"宋體\";")
        self.label_2.setObjectName("label_2")

        self.retranslateUi(login_2)
        QtCore.QMetaObject.connectSlotsByName(login_2)

    def retranslateUi(self, login_2):
        _translate = QtCore.QCoreApplication.translate
        login_2.setWindowTitle(_translate("login_2", "Dialog"))
        self.name_label.setText(_translate("login_2", "用戶名:"))
        self.pw_label.setText(_translate("login_2", "密碼:"))
        self.checkBox.setText(_translate("login_2", "   記住用戶名和密碼"))
        self.login.setText(_translate("login_2", "登錄"))
        self.register_2.setText(_translate("login_2", "註冊"))

        self.login.clicked.connect(self.jump_to_filter)  #按鈕與跳轉函數連接,實現跳轉到filter界面
        self.register_2.clicked.connect(self.jump_to_filter)  
        self.login.clicked.connect(self.exit)  #跳轉之後退出
        self.register_2.clicked.connect(self.exit)

        self.label.setText(_translate("login_2", "              歡迎登錄  A股篩 -- 根據財務指標自由篩選公司"))
        self.label_2.setText(_translate("login_2", "copyright©2018   bigdata"))

    #界面跳轉函數
    def jump_to_filter(self):
        self.log.hide()
        log1 = QtWidgets.QDialog()
        ui = window.Ui_Form() 
        ui.setupUi(log1)
        log1.show()
        log1.exec_()
        self.log.show()

    #跳轉之後退出
    def exit(self):
        self.log.close()

#主函數
if __name__=='__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    ui = Ui_login_2()
    ui.setupUi(widget)
    widget.show()
    sys.exit(app.exec_())

結果顯示

這裏寫圖片描述

跳轉到的界面

這裏寫圖片描述

四、參考

python3 PyQt5 pycharm 環境搭建

PyQt 官網

PyQt 設置背景及顏色

基於Qt designer 的編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章