pyqt5簡單使用心得

本篇不講什么畫UI的代碼心得...本來我也不喜歡畫ui
也不扯信號與槽那些概念芋类,反正就是講一下快速上手的方法,如何快速實現(xiàn)想要的功能位喂。
反正正統(tǒng)畫UI教程一搜一大堆疗垛,比如這里講的很詳細(xì)了。

不得不說宾肺,pyQtC++Qt簡單好多...
首先安裝溯饵,只需要pip install pyqt5就好,不需要去官網(wǎng)下載什么東西锨用。
不過這樣安裝完看上面鏈接教程開始寫代碼的話丰刊,就是走困難模式了。
畫UI最方便當(dāng)然是用控件拖來拖去增拥,用代碼多麻煩累死人啄巧。

所以暫時不要管上面的鏈接教程,接下來還需要用pip install pyqt5-tools下好qtdesigner掌栅,打開進(jìn)行拖控件的畫UI過程秩仆。
不要問在哪里,在下好的包文件夾里...找不到就從import pyQt5的源碼里跳轉(zhuǎn)打開pyqt5的文件夾去再往前找pyqt5-tools文件夾進(jìn)去就有這個exe了渣玲,什么你用的notepad++不支持跳轉(zhuǎn)趕緊換vscode或者重量級的pycharm吧逗概。
不過這個軟件好像是英文的哎,雖然網(wǎng)上有的是中文可能是另下的...要有起碼的英文水平忘衍,也不難實在不行就對著查單詞逾苫。
像什么這個軟件似乎做不出來的圖標(biāo)和浮動提示框在上面的教程有可以在后期用代碼補一下。

畫完左上角保存到桌面或者其他地方后枚钓,在那個目錄只需要pyuic5 -x untitled.ui -o test.py就可以生成能直接運行的代碼了铅搓。不加-x的話要改成pyuic5 -o test.py untitled.ui,不過這樣的話還不能直接運行搀捷,要在下面加好幾行代碼:

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

但是用第一條命令的話星掰,這些代碼是自動補上的多望,所以更方便。

下面總結(jié)一下用到的幾個控件氢烘,注意要對Python的類與對象有一定了解怀偷。

輸入框(textEdit)

一般拿來輸入當(dāng)作input用。也可以用來顯示播玖,編輯椎工,再保存。
顯示的方法是在當(dāng)前代碼類中定義一個函數(shù)

    def setTextEdit(self, category: str):
        self.textEdit.setText('...<b>測試</b>.......(pyQt的所有顯示文字都可以用html語法)')

括號里可以是功能函數(shù)的返回值蜀踏,于是就輸出到界面上了维蒙。其實連接邏輯實現(xiàn)函數(shù)就有信號與槽的概念了...從實際功能轉(zhuǎn)到為它取1個名字比較容易接受。

按鈕(pushButton)

點擊觸發(fā)其他函數(shù)運行

self.pushButton.clicked.connect()

括號里是要運行的類內(nèi)函數(shù)的名字果覆,就像用多線程threading等模塊一樣颅痊,不需要帶括號。如果那個函數(shù)不止self一個參數(shù)局待,就用lambda表達(dá)式然后是完整的函數(shù)帶括號帶參數(shù)斑响,當(dāng)然還有別的方法,不過lambda表達(dá)式比較直觀

self.pushButton.clicked.connect(lambda: self.reloadTextEdit(args1, args2, ...))

文本瀏覽框(textBrowser)

用來顯示文本燎猛,不可編輯恋捆。
不清空的顯示用的比較多照皆,實際上是一個列表持續(xù)append每行數(shù)據(jù)重绷。也就是說這個列表元素必須是str類型。

import xxx  # 當(dāng)前目錄下的其他.py文件膜毁,提供邏輯功能實現(xiàn)


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        pass  # 這里就省略了
    def func(self):
        for i in xxx.afunc(self.textEdit.toPlainText()):
            self.textBrowser.append(i)

這個func()一般就是上面pushButton的連接函數(shù)之一了昭卓。
self.textEdit.toPlainText()相當(dāng)于input()
很多時候其實輸入.之后等ide彈出相關(guān)的方法瘟滨,直接輸text看看還剩下啥就猜得到需要用啥方法了候醒。當(dāng)然ide一定要有這個功能,雖然我用的vscode還不算ide,嘛vs2017和pycharm也都可以做到杂瘸。

下拉框(comboBox)

可以直接在初始化時添加一系列元素倒淫,使用self.comboBox.additem()方法,括號內(nèi)是要添加的元素败玉,或者用self.comboBox.additems()方法敌土,括號內(nèi)可以是一個列表,所有列表內(nèi)的元素都變成下拉選項之一运翼。
每次選定下拉元素后返干,當(dāng)前選項是self.comboBox.currentText()使用self.comboBox.activated.connect()來激活選項。

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(700, 180, 240, 30))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItems(...)  # 里面是一個list
        self.comboBox.activated.connect(lambda: self.setTextEdit(self.currentCategory()))
        pass  # 這里就省略了

    def currentCategory(self):
        return self.comboBox.currentText()

    def setTextEdit(self, category: str):
        self.textEdit.setText('...')

圖標(biāo)

上面鏈接里入門教程就有圖標(biāo)和懸浮提示血淌,后者沒啥問題就不寫了矩欠,前者如果不熟悉類的話可能一下子寫不對。

    def retranslateUi(self, MainWindow):
        pass
        MainWindow.setWindowIcon(QtGui.QIcon('icon.png'))
        pass

其實大致上的代碼是在最下面的retranslateUi函數(shù)(這是ui轉(zhuǎn)化成代碼時自動生成的函數(shù))里加一行就行,icon.png是放在當(dāng)前目錄下的圖片文件名癌淮。打包后的話要和exe文件放在一個文件夾躺坟。

暫時就用到以上這些,像是label這樣超級基礎(chǔ)的玩意就算了不寫了乳蓄。
最后瞳氓,用pyinstaller打包的話,直接打包由于不認(rèn)識pyqt的動態(tài)鏈接庫會有一些錯誤栓袖,應(yīng)該這樣

pyinstaller --paths C:\Users\...\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\bin -F -w test.py xxx.py

paths后面的路徑是自己電腦里pyqtbin文件夾位置匣摘,一般默認(rèn)只要把上面的省略號換成自己用戶名就好了。
多個文件打包只需要空格分開就好裹刮。
-F加上后會只生成一個exe文件音榜,否則會生成很多其他文件。
-w加上后運行程序不會出現(xiàn)命令行背景捧弃。也就是說看不到如果崩潰時的錯誤信息赠叼,只是給用戶用的。

好了违霞,以上代碼雖然足夠隨便寫一個軟件出來...
但是有兩個嚴(yán)重問題:

  1. 邏輯實現(xiàn)和UI實現(xiàn)代碼沒有分開在不同線程工作嘴办,如果邏輯實現(xiàn)運行比較久的話程序就卡住了。再鼠標(biāo)點擊下可能就崩潰了买鸽。
  2. 直接依靠拖動定位的話涧郊,在不同分辨率上的顯示效果不一樣,可能錯位或者部分顯示被吃了眼五,以及拉伸界面不會自動空間跟著過去妆艘。

哎反正我只有三天時間強行做出來的這么一個東西,一開始完全一臉懵比狀態(tài)啥也不知道看幼,就暫時不要要求太高了批旺。
而且客戶端時代早已過去,web才是未來诵姜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汽煮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棚唆,更是在濱河造成了極大的恐慌暇赤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟俭,死亡現(xiàn)場離奇詭異翎卓,居然都是意外死亡,警方通過查閱死者的電腦和手機摆寄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門失暴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坯门,“玉大人,你說我怎么就攤上這事逗扒」糯鳎” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵矩肩,是天一觀的道長现恼。 經(jīng)常有香客問我,道長黍檩,這世上最難降的妖魔是什么叉袍? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮刽酱,結(jié)果婚禮上喳逛,老公的妹妹穿的比我還像新娘。我一直安慰自己棵里,他們只是感情好润文,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殿怜,像睡著了一般典蝌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上头谜,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天骏掀,我揣著相機與錄音,去河邊找鬼乔夯。 笑死砖织,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的末荐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼新锈,長吁一口氣:“原來是場噩夢啊……” “哼甲脏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妹笆,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤块请,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拳缠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩新,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年窟坐,在試婚紗的時候發(fā)現(xiàn)自己被綠了海渊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵疲。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖臣疑,靈堂內(nèi)的尸體忽然破棺而出盔憨,到底是詐尸還是另有隱情,我是刑警寧澤讯沈,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布郁岩,位于F島的核電站,受9級特大地震影響缺狠,放射性物質(zhì)發(fā)生泄漏问慎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一挤茄、第九天 我趴在偏房一處隱蔽的房頂上張望蝴乔。 院中可真熱鬧,春花似錦驮樊、人聲如沸薇正。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挖腰。三九已至,卻和暖如春练湿,著一層夾襖步出監(jiān)牢的瞬間猴仑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工肥哎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辽俗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓篡诽,卻偏偏與公主長得像崖飘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杈女,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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