如何使用python設(shè)計(jì)簡單的UI?——以pyqt5為例

一岁疼、pyqt5下載與安裝

python版本:3.5.2

操作系統(tǒng):win10

安裝命令:pip install pyqt5 pyqt5-tools (注意:僅僅pip install pyqt5是不夠的)

檢驗(yàn)安裝是否成功:

from PyQt5 import QtWidgets, QtGui

import sys

app = QtWidgets.QApplication(sys.argv)

window = QtWidgets.QWidget()

window.show()

sys.exit(app.exec_())

如下視圖市咆,說明安裝正確:


image.png

二荞雏、運(yùn)行designer.exe

安裝完pyqt5-tools后嫂冻,自帶designer.exe,win10下异吻,cmd,打開命令行界面喜庞,輸入如下命令獲取python默認(rèn)安裝路徑:

python -c "import sys; print(sys.executable)"

再從.\Python35\Lib\site-packages\pyqt5_tools中找到designer.exe诀浪,例如我的designer.exe本地路徑為:
“C:\Program Files\Python35\Lib\site-packages\pyqt5_tools\designer.exe”,建議發(fā)送桌面快捷方式延都。
designer.exe打開界面如下:


qt.png

選擇main windows雷猪,進(jìn)入界面設(shè)計(jì)狀態(tài)。隨意添加按鈕晰房,如下求摇,并將保存為.ui后綴的文件射沟,例如test.ui。


設(shè)計(jì)草圖.png

test.ui保存路徑為“D:\seasson\CheckpointTool\test.ui”

三与境、.ui文件文件轉(zhuǎn)化為.py文件

qt designer設(shè)計(jì)出來的文件默認(rèn)為.ui文件验夯,里面包含的類css布局設(shè)計(jì)語言,如果想用python運(yùn)行嚷辅,我們還需要將它轉(zhuǎn)換成.py文件簿姨,這里使用pyuic來完成轉(zhuǎn)換距误。打開cmd簸搞,輸入如下dos命令:

pyuic5 -o D:\seasson\CheckpointTool\test.py D:\seasson\CheckpointTool\test.ui

轉(zhuǎn)化完后截圖如下:


.ui轉(zhuǎn)化為.py.png

打開test.py,內(nèi)容如下:

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

# Form implementation generated from reading ui file 'D:\seasson\CheckpointTool\test.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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(310, 250, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton.setGeometry(QtCore.QRect(220, 320, 115, 19))
        self.radioButton.setObjectName("radioButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(490, 300, 91, 19))
        self.checkBox.setObjectName("checkBox")
        self.buttonBox = QtWidgets.QDialogButtonBox(self.centralwidget)
        self.buttonBox.setGeometry(QtCore.QRect(330, 440, 193, 28))
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_2.setGeometry(QtCore.QRect(110, 220, 91, 19))
        self.checkBox_2.setObjectName("checkBox_2")
        self.commandLinkButton = QtWidgets.QCommandLinkButton(self.centralwidget)
        self.commandLinkButton.setGeometry(QtCore.QRect(150, 370, 222, 48))
        self.commandLinkButton.setObjectName("commandLinkButton")
        self.toolButton = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton.setGeometry(QtCore.QRect(300, 200, 47, 21))
        self.toolButton.setObjectName("toolButton")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(520, 20, 256, 192))
        self.tableView.setObjectName("tableView")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.radioButton.setText(_translate("MainWindow", "RadioButton"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))
        self.checkBox_2.setText(_translate("MainWindow", "CheckBox"))
        self.commandLinkButton.setText(_translate("MainWindow", "CommandLinkButton"))
        self.toolButton.setText(_translate("MainWindow", "..."))

四准潭、運(yùn)行.py文件趁俊,重現(xiàn)設(shè)計(jì)界面

打開生成的.py文件,Ui_MainWindow這個(gè)類已經(jīng)把布局都寫好了刑然。我只要修改調(diào)用一下就可以運(yùn)行寺擂。
在代碼后面添以下代碼:

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()

    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

運(yùn)行結(jié)果如下:


運(yùn)行.py生成UI界面.png

五、總結(jié)

這里主要使用pyqt5設(shè)計(jì)ui界面泼掠,通過Qt designer拖拽生成想要設(shè)計(jì)的界面怔软,保存為.ui文件,通過pyuic5將.ui轉(zhuǎn)化為.py文件择镇,使得能在python下運(yùn)行挡逼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腻豌,隨后出現(xiàn)的幾起案子家坎,更是在濱河造成了極大的恐慌,老刑警劉巖吝梅,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱疏,死亡現(xiàn)場離奇詭異,居然都是意外死亡苏携,警方通過查閱死者的電腦和手機(jī)做瞪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來右冻,“玉大人装蓬,你說我怎么就攤上這事」酰” “怎么了矛物?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跪但。 經(jīng)常有香客問我履羞,道長峦萎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任忆首,我火速辦了婚禮爱榔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糙及。我一直安慰自己详幽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布浸锨。 她就那樣靜靜地躺著唇聘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柱搜。 梳的紋絲不亂的頭發(fā)上迟郎,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音聪蘸,去河邊找鬼宪肖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛健爬,可吹牛的內(nèi)容都是我干的控乾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娜遵,長吁一口氣:“原來是場噩夢啊……” “哼蜕衡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起魔熏,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤衷咽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蒜绽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镶骗,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年躲雅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鼎姊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡相赁,死狀恐怖相寇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钮科,我是刑警寧澤唤衫,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站绵脯,受9級特大地震影響佳励,放射性物質(zhì)發(fā)生泄漏休里。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一赃承、第九天 我趴在偏房一處隱蔽的房頂上張望妙黍。 院中可真熱鬧,春花似錦瞧剖、人聲如沸拭嫁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽做粤。三九已至,卻和暖如春毡咏,著一層夾襖步出監(jiān)牢的瞬間驮宴,已是汗流浹背逮刨。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工呕缭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人修己。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓恢总,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睬愤。 傳聞我的和親對象是個(gè)殘疾皇子片仿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容