Last Updated on 2021-04-10 by Clay
最近幾天 Monster Hunter World: Iceborne 發售了(其實已經發售一段時間了),最近沉浸在獵龍的樂趣裡頭,真的是什麼都不想管了,哈哈哈哈。
如果你想看我當初遊玩心得的話,傳送門在這裡: 魔物獵人《世界》Iceborne —— 發售首日至今心得
本來一直想要做個魔物獵人配裝器的,但是苦於網路上目前沒有相關的資料(聽說有日文的),我一直猶豫不決要不要自己動手整理資料。(因為這真的很累 XDDD)
昨天,察覺到一直玩的朋友會慢慢找 WIKI 上的魔物弱點屬性,我就開始想:何必這麼辛苦了?一直切網頁很慢欸。
於是,我自己隨便地做出了個魔物弱點查詢的 GUI,雖然很醜,但是我個人認為比切換 WIKI 頁面快了很多,也暫時得到了朋友的認證 XDDD
那麼,我想我今天就來分享怎麼製作魔物獵人的弱點屬性查詢吧!最終目標還是做出魔物獵人的配裝器,不過可能就等我有空再說吧~
事先聲明,我最終做出來的弱點查詢其實很醜:
點擊圖示之後,會跳出新的視窗,我用的是網路上找到的魔物圖鑑:(之後我會全部換成自己的高清版,這裡只是示範。)
這裡我們拿碎龍來示範,效果如上。
那麼,以下開始介紹我怎麼製作這個簡單的魔物弱點屬性查詢。
如果你想學習 Python,那也許可以參考我之前寫過的系列:Python 基本教學
如果你想學習怎麼使用 Python 開發簡單的 GUI 界面,也許可以參考這裡:PyQt5 基本教學
製作界面
首先,我使用 Qt Designer 創造了一個這樣的界面,主要是使用 QLabel 來顯示魔物名字、使用 QPushButton 來安排不同怪物的弱點屬性顯示。
Code 如下,(將 Qt Designer 輸出的 .ui 檔使用 PyUIC 轉成 Python 檔),事先聲明,因為我預設拉了很多元件,所以可能會有點冗長,基本上可以跳過不看沒有關係。只需要知道我裡頭的元件有 QLabel 以及 QPushButton 共 53 組。
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'MonsterWeakness.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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(919, 890) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(10, 0, 91, 51)) self.label.setText("") self.label.setObjectName("label") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(10, 50, 91, 81)) self.pushButton.setText("") self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(100, 50, 91, 81)) self.pushButton_2.setText("") self.pushButton_2.setObjectName("pushButton_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(100, 0, 91, 51)) self.label_2.setText("") self.label_2.setObjectName("label_2") self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_3.setGeometry(QtCore.QRect(190, 50, 91, 81)) self.pushButton_3.setText("") self.pushButton_3.setObjectName("pushButton_3") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(190, 0, 91, 51)) self.label_3.setText("") self.label_3.setObjectName("label_3") self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_4.setGeometry(QtCore.QRect(280, 50, 91, 81)) self.pushButton_4.setText("") self.pushButton_4.setObjectName("pushButton_4") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(280, 0, 91, 51)) self.label_4.setText("") self.label_4.setObjectName("label_4") self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_5.setGeometry(QtCore.QRect(370, 50, 91, 81)) self.pushButton_5.setText("") self.pushButton_5.setObjectName("pushButton_5") self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(370, 0, 91, 51)) self.label_5.setText("") self.label_5.setObjectName("label_5") self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_6.setGeometry(QtCore.QRect(460, 50, 91, 81)) self.pushButton_6.setText("") self.pushButton_6.setObjectName("pushButton_6") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(460, 0, 91, 51)) self.label_6.setText("") self.label_6.setObjectName("label_6") self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_7.setGeometry(QtCore.QRect(550, 50, 91, 81)) self.pushButton_7.setText("") self.pushButton_7.setObjectName("pushButton_7") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(550, 0, 91, 51)) self.label_7.setText("") self.label_7.setObjectName("label_7") self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_8.setGeometry(QtCore.QRect(640, 50, 91, 81)) self.pushButton_8.setText("") self.pushButton_8.setObjectName("pushButton_8") self.label_8 = QtWidgets.QLabel(self.centralwidget) self.label_8.setGeometry(QtCore.QRect(640, 0, 91, 51)) self.label_8.setText("") self.label_8.setObjectName("label_8") self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_9.setGeometry(QtCore.QRect(730, 50, 91, 81)) self.pushButton_9.setText("") self.pushButton_9.setObjectName("pushButton_9") self.label_9 = QtWidgets.QLabel(self.centralwidget) self.label_9.setGeometry(QtCore.QRect(730, 0, 91, 51)) self.label_9.setText("") self.label_9.setObjectName("label_9") self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_10.setGeometry(QtCore.QRect(820, 50, 91, 81)) self.pushButton_10.setText("") self.pushButton_10.setObjectName("pushButton_10") self.label_10 = QtWidgets.QLabel(self.centralwidget) self.label_10.setGeometry(QtCore.QRect(820, 0, 91, 51)) self.label_10.setText("") self.label_10.setObjectName("label_10") self.pushButton_11 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_11.setGeometry(QtCore.QRect(10, 190, 91, 81)) self.pushButton_11.setText("") self.pushButton_11.setObjectName("pushButton_11") self.label_11 = QtWidgets.QLabel(self.centralwidget) self.label_11.setGeometry(QtCore.QRect(10, 140, 91, 51)) self.label_11.setText("") self.label_11.setObjectName("label_11") self.pushButton_12 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_12.setGeometry(QtCore.QRect(100, 190, 91, 81)) self.pushButton_12.setText("") self.pushButton_12.setObjectName("pushButton_12") self.label_12 = QtWidgets.QLabel(self.centralwidget) self.label_12.setGeometry(QtCore.QRect(100, 140, 91, 51)) self.label_12.setText("") self.label_12.setObjectName("label_12") self.pushButton_13 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_13.setGeometry(QtCore.QRect(190, 190, 91, 81)) self.pushButton_13.setText("") self.pushButton_13.setObjectName("pushButton_13") self.pushButton_14 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_14.setGeometry(QtCore.QRect(280, 190, 91, 81)) self.pushButton_14.setText("") self.pushButton_14.setObjectName("pushButton_14") self.pushButton_15 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_15.setGeometry(QtCore.QRect(370, 190, 91, 81)) self.pushButton_15.setText("") self.pushButton_15.setObjectName("pushButton_15") self.label_13 = QtWidgets.QLabel(self.centralwidget) self.label_13.setGeometry(QtCore.QRect(190, 140, 91, 51)) self.label_13.setText("") self.label_13.setObjectName("label_13") self.label_14 = QtWidgets.QLabel(self.centralwidget) self.label_14.setGeometry(QtCore.QRect(280, 140, 91, 51)) self.label_14.setText("") self.label_14.setObjectName("label_14") self.pushButton_16 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_16.setGeometry(QtCore.QRect(460, 190, 91, 81)) self.pushButton_16.setText("") self.pushButton_16.setObjectName("pushButton_16") self.pushButton_17 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_17.setGeometry(QtCore.QRect(550, 190, 91, 81)) self.pushButton_17.setText("") self.pushButton_17.setObjectName("pushButton_17") self.label_15 = QtWidgets.QLabel(self.centralwidget) self.label_15.setGeometry(QtCore.QRect(370, 140, 91, 51)) self.label_15.setText("") self.label_15.setObjectName("label_15") self.label_16 = QtWidgets.QLabel(self.centralwidget) self.label_16.setGeometry(QtCore.QRect(460, 140, 91, 51)) self.label_16.setText("") self.label_16.setObjectName("label_16") self.pushButton_18 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_18.setGeometry(QtCore.QRect(640, 190, 91, 81)) self.pushButton_18.setText("") self.pushButton_18.setObjectName("pushButton_18") self.pushButton_19 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_19.setGeometry(QtCore.QRect(730, 190, 91, 81)) self.pushButton_19.setText("") self.pushButton_19.setObjectName("pushButton_19") self.label_17 = QtWidgets.QLabel(self.centralwidget) self.label_17.setGeometry(QtCore.QRect(550, 140, 91, 51)) self.label_17.setText("") self.label_17.setObjectName("label_17") self.label_18 = QtWidgets.QLabel(self.centralwidget) self.label_18.setGeometry(QtCore.QRect(640, 140, 91, 51)) self.label_18.setText("") self.label_18.setObjectName("label_18") self.label_19 = QtWidgets.QLabel(self.centralwidget) self.label_19.setGeometry(QtCore.QRect(730, 140, 91, 51)) self.label_19.setText("") self.label_19.setObjectName("label_19") self.pushButton_20 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_20.setGeometry(QtCore.QRect(820, 190, 91, 81)) self.pushButton_20.setText("") self.pushButton_20.setObjectName("pushButton_20") self.label_20 = QtWidgets.QLabel(self.centralwidget) self.label_20.setGeometry(QtCore.QRect(820, 140, 91, 51)) self.label_20.setText("") self.label_20.setObjectName("label_20") self.pushButton_21 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_21.setGeometry(QtCore.QRect(10, 330, 91, 81)) self.pushButton_21.setText("") self.pushButton_21.setObjectName("pushButton_21") self.label_21 = QtWidgets.QLabel(self.centralwidget) self.label_21.setGeometry(QtCore.QRect(10, 280, 91, 51)) self.label_21.setText("") self.label_21.setObjectName("label_21") self.pushButton_22 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_22.setGeometry(QtCore.QRect(100, 330, 91, 81)) self.pushButton_22.setText("") self.pushButton_22.setObjectName("pushButton_22") self.label_22 = QtWidgets.QLabel(self.centralwidget) self.label_22.setGeometry(QtCore.QRect(100, 280, 91, 51)) self.label_22.setText("") self.label_22.setObjectName("label_22") self.pushButton_23 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_23.setGeometry(QtCore.QRect(190, 330, 91, 81)) self.pushButton_23.setText("") self.pushButton_23.setObjectName("pushButton_23") self.pushButton_24 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_24.setGeometry(QtCore.QRect(280, 330, 91, 81)) self.pushButton_24.setText("") self.pushButton_24.setObjectName("pushButton_24") self.pushButton_25 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_25.setGeometry(QtCore.QRect(370, 330, 91, 81)) self.pushButton_25.setText("") self.pushButton_25.setObjectName("pushButton_25") self.label_23 = QtWidgets.QLabel(self.centralwidget) self.label_23.setGeometry(QtCore.QRect(190, 280, 91, 51)) self.label_23.setText("") self.label_23.setObjectName("label_23") self.label_24 = QtWidgets.QLabel(self.centralwidget) self.label_24.setGeometry(QtCore.QRect(280, 280, 91, 51)) self.label_24.setText("") self.label_24.setObjectName("label_24") self.pushButton_26 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_26.setGeometry(QtCore.QRect(460, 330, 91, 81)) self.pushButton_26.setText("") self.pushButton_26.setObjectName("pushButton_26") self.pushButton_27 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_27.setGeometry(QtCore.QRect(550, 330, 91, 81)) self.pushButton_27.setText("") self.pushButton_27.setObjectName("pushButton_27") self.label_25 = QtWidgets.QLabel(self.centralwidget) self.label_25.setGeometry(QtCore.QRect(370, 280, 91, 51)) self.label_25.setText("") self.label_25.setObjectName("label_25") self.label_26 = QtWidgets.QLabel(self.centralwidget) self.label_26.setGeometry(QtCore.QRect(460, 280, 91, 51)) self.label_26.setText("") self.label_26.setObjectName("label_26") self.pushButton_28 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_28.setGeometry(QtCore.QRect(640, 330, 91, 81)) self.pushButton_28.setText("") self.pushButton_28.setObjectName("pushButton_28") self.pushButton_29 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_29.setGeometry(QtCore.QRect(730, 330, 91, 81)) self.pushButton_29.setText("") self.pushButton_29.setObjectName("pushButton_29") self.label_27 = QtWidgets.QLabel(self.centralwidget) self.label_27.setGeometry(QtCore.QRect(550, 280, 91, 51)) self.label_27.setText("") self.label_27.setObjectName("label_27") self.label_28 = QtWidgets.QLabel(self.centralwidget) self.label_28.setGeometry(QtCore.QRect(640, 280, 91, 51)) self.label_28.setText("") self.label_28.setObjectName("label_28") self.label_29 = QtWidgets.QLabel(self.centralwidget) self.label_29.setGeometry(QtCore.QRect(730, 280, 91, 51)) self.label_29.setText("") self.label_29.setObjectName("label_29") self.pushButton_30 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_30.setGeometry(QtCore.QRect(820, 330, 91, 81)) self.pushButton_30.setText("") self.pushButton_30.setObjectName("pushButton_30") self.label_30 = QtWidgets.QLabel(self.centralwidget) self.label_30.setGeometry(QtCore.QRect(820, 280, 91, 51)) self.label_30.setText("") self.label_30.setObjectName("label_30") self.pushButton_31 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_31.setGeometry(QtCore.QRect(10, 470, 91, 81)) self.pushButton_31.setText("") self.pushButton_31.setObjectName("pushButton_31") self.label_31 = QtWidgets.QLabel(self.centralwidget) self.label_31.setGeometry(QtCore.QRect(10, 420, 91, 51)) self.label_31.setText("") self.label_31.setObjectName("label_31") self.pushButton_32 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_32.setGeometry(QtCore.QRect(100, 470, 91, 81)) self.pushButton_32.setText("") self.pushButton_32.setObjectName("pushButton_32") self.label_32 = QtWidgets.QLabel(self.centralwidget) self.label_32.setGeometry(QtCore.QRect(100, 420, 91, 51)) self.label_32.setText("") self.label_32.setObjectName("label_32") self.pushButton_33 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_33.setGeometry(QtCore.QRect(190, 470, 91, 81)) self.pushButton_33.setText("") self.pushButton_33.setObjectName("pushButton_33") self.pushButton_34 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_34.setGeometry(QtCore.QRect(280, 470, 91, 81)) self.pushButton_34.setText("") self.pushButton_34.setObjectName("pushButton_34") self.pushButton_35 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_35.setGeometry(QtCore.QRect(370, 470, 91, 81)) self.pushButton_35.setText("") self.pushButton_35.setObjectName("pushButton_35") self.label_33 = QtWidgets.QLabel(self.centralwidget) self.label_33.setGeometry(QtCore.QRect(190, 420, 91, 51)) self.label_33.setText("") self.label_33.setObjectName("label_33") self.label_34 = QtWidgets.QLabel(self.centralwidget) self.label_34.setGeometry(QtCore.QRect(280, 420, 91, 51)) self.label_34.setText("") self.label_34.setObjectName("label_34") self.pushButton_36 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_36.setGeometry(QtCore.QRect(460, 470, 91, 81)) self.pushButton_36.setText("") self.pushButton_36.setObjectName("pushButton_36") self.pushButton_37 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_37.setGeometry(QtCore.QRect(550, 470, 91, 81)) self.pushButton_37.setText("") self.pushButton_37.setObjectName("pushButton_37") self.label_35 = QtWidgets.QLabel(self.centralwidget) self.label_35.setGeometry(QtCore.QRect(370, 420, 91, 51)) self.label_35.setText("") self.label_35.setObjectName("label_35") self.label_36 = QtWidgets.QLabel(self.centralwidget) self.label_36.setGeometry(QtCore.QRect(460, 420, 91, 51)) self.label_36.setText("") self.label_36.setObjectName("label_36") self.pushButton_38 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_38.setGeometry(QtCore.QRect(640, 470, 91, 81)) self.pushButton_38.setText("") self.pushButton_38.setObjectName("pushButton_38") self.pushButton_39 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_39.setGeometry(QtCore.QRect(730, 470, 91, 81)) self.pushButton_39.setText("") self.pushButton_39.setObjectName("pushButton_39") self.label_37 = QtWidgets.QLabel(self.centralwidget) self.label_37.setGeometry(QtCore.QRect(550, 420, 91, 51)) self.label_37.setText("") self.label_37.setObjectName("label_37") self.label_38 = QtWidgets.QLabel(self.centralwidget) self.label_38.setGeometry(QtCore.QRect(640, 420, 91, 51)) self.label_38.setText("") self.label_38.setObjectName("label_38") self.label_39 = QtWidgets.QLabel(self.centralwidget) self.label_39.setGeometry(QtCore.QRect(730, 420, 91, 51)) self.label_39.setText("") self.label_39.setObjectName("label_39") self.pushButton_40 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_40.setGeometry(QtCore.QRect(820, 470, 91, 81)) self.pushButton_40.setText("") self.pushButton_40.setObjectName("pushButton_40") self.label_40 = QtWidgets.QLabel(self.centralwidget) self.label_40.setGeometry(QtCore.QRect(820, 420, 91, 51)) self.label_40.setText("") self.label_40.setObjectName("label_40") self.pushButton_41 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_41.setGeometry(QtCore.QRect(10, 610, 91, 81)) self.pushButton_41.setText("") self.pushButton_41.setObjectName("pushButton_41") self.label_41 = QtWidgets.QLabel(self.centralwidget) self.label_41.setGeometry(QtCore.QRect(10, 560, 91, 51)) self.label_41.setText("") self.label_41.setObjectName("label_41") self.pushButton_42 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_42.setGeometry(QtCore.QRect(100, 610, 91, 81)) self.pushButton_42.setText("") self.pushButton_42.setObjectName("pushButton_42") self.label_42 = QtWidgets.QLabel(self.centralwidget) self.label_42.setGeometry(QtCore.QRect(100, 560, 91, 51)) self.label_42.setText("") self.label_42.setObjectName("label_42") self.pushButton_43 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_43.setGeometry(QtCore.QRect(190, 610, 91, 81)) self.pushButton_43.setText("") self.pushButton_43.setObjectName("pushButton_43") self.pushButton_44 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_44.setGeometry(QtCore.QRect(280, 610, 91, 81)) self.pushButton_44.setText("") self.pushButton_44.setObjectName("pushButton_44") self.pushButton_45 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_45.setGeometry(QtCore.QRect(370, 610, 91, 81)) self.pushButton_45.setText("") self.pushButton_45.setObjectName("pushButton_45") self.label_43 = QtWidgets.QLabel(self.centralwidget) self.label_43.setGeometry(QtCore.QRect(190, 560, 91, 51)) self.label_43.setText("") self.label_43.setObjectName("label_43") self.label_44 = QtWidgets.QLabel(self.centralwidget) self.label_44.setGeometry(QtCore.QRect(280, 560, 91, 51)) self.label_44.setText("") self.label_44.setObjectName("label_44") self.pushButton_46 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_46.setGeometry(QtCore.QRect(460, 610, 91, 81)) self.pushButton_46.setText("") self.pushButton_46.setObjectName("pushButton_46") self.pushButton_47 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_47.setGeometry(QtCore.QRect(550, 610, 91, 81)) self.pushButton_47.setText("") self.pushButton_47.setObjectName("pushButton_47") self.label_45 = QtWidgets.QLabel(self.centralwidget) self.label_45.setGeometry(QtCore.QRect(370, 560, 91, 51)) self.label_45.setText("") self.label_45.setObjectName("label_45") self.label_46 = QtWidgets.QLabel(self.centralwidget) self.label_46.setGeometry(QtCore.QRect(460, 560, 91, 51)) self.label_46.setText("") self.label_46.setObjectName("label_46") self.pushButton_48 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_48.setGeometry(QtCore.QRect(640, 610, 91, 81)) self.pushButton_48.setText("") self.pushButton_48.setObjectName("pushButton_48") self.pushButton_49 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_49.setGeometry(QtCore.QRect(730, 610, 91, 81)) self.pushButton_49.setText("") self.pushButton_49.setObjectName("pushButton_49") self.label_47 = QtWidgets.QLabel(self.centralwidget) self.label_47.setGeometry(QtCore.QRect(550, 560, 91, 51)) self.label_47.setText("") self.label_47.setObjectName("label_47") self.label_48 = QtWidgets.QLabel(self.centralwidget) self.label_48.setGeometry(QtCore.QRect(640, 560, 91, 51)) self.label_48.setText("") self.label_48.setObjectName("label_48") self.label_49 = QtWidgets.QLabel(self.centralwidget) self.label_49.setGeometry(QtCore.QRect(730, 560, 91, 51)) self.label_49.setText("") self.label_49.setObjectName("label_49") self.pushButton_50 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_50.setGeometry(QtCore.QRect(820, 610, 91, 81)) self.pushButton_50.setText("") self.pushButton_50.setObjectName("pushButton_50") self.label_50 = QtWidgets.QLabel(self.centralwidget) self.label_50.setGeometry(QtCore.QRect(820, 560, 91, 51)) self.label_50.setText("") self.label_50.setObjectName("label_50") self.pushButton_51 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_51.setGeometry(QtCore.QRect(10, 750, 91, 81)) self.pushButton_51.setText("") self.pushButton_51.setObjectName("pushButton_51") self.pushButton_52 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_52.setGeometry(QtCore.QRect(100, 750, 91, 81)) self.pushButton_52.setText("") self.pushButton_52.setObjectName("pushButton_52") self.pushButton_53 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_53.setGeometry(QtCore.QRect(190, 750, 91, 81)) self.pushButton_53.setText("") self.pushButton_53.setObjectName("pushButton_53") self.label_51 = QtWidgets.QLabel(self.centralwidget) self.label_51.setGeometry(QtCore.QRect(10, 700, 91, 51)) self.label_51.setText("") self.label_51.setObjectName("label_51") self.label_52 = QtWidgets.QLabel(self.centralwidget) self.label_52.setGeometry(QtCore.QRect(100, 700, 91, 51)) self.label_52.setText("") self.label_52.setObjectName("label_52") self.label_53 = QtWidgets.QLabel(self.centralwidget) self.label_53.setGeometry(QtCore.QRect(190, 700, 91, 51)) self.label_53.setText("") self.label_53.setObjectName("label_53") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 919, 25)) 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"))
另外,我額外寫了一個界面,用於顯示魔物資訊的圖片。
Code 如下:
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'subMonsterWeakness.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow_sub(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(0, 0, 801, 611)) self.label.setText("") self.label.setObjectName("label") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25)) 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"))
基本上這個子界面我只擺了一個 QLabel,其大小幾乎與視窗等大,另外可以看到這幾行。
# self.statusbar = QtWidgets.QStatusBar(MainWindow)
# self.statusbar.setObjectName("statusbar")
# MainWindow.setStatusBar(self.statusbar)
這三行基本上把底下的狀態欄去掉了,否則我顯示的圖片底下會有白色的狀態欄,看起來很突兀。
然後,各位若有看過我的心得筆記,應該還記得怎麼定義 QPushButton, QLabel。
我們將界面與程式功能的部份分離,另外寫一份檔案繼承界面檔。當然,兩份界面的 Python 檔都要繼承。
這份就是我們最終產生界面的 Python 檔了,同樣很長,底下我再說明我怎麼產生這份檔案(是的,我大部分的時候不是自己寫的,而是透過程式產生。)
QLabel
# -*- coding: utf-8 -*- import PyQt5 from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from MonsterWeakness import Ui_MainWindow from subMonsterWeakness import Ui_MainWindow_sub import sys class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) # LOGO self.setWindowIcon(QIcon('MHWI_LOGO.png')) # Label self.ui.label.setText("冥燈龍") self.ui.label.setAlignment(Qt.AlignCenter) self.ui.label_2.setText("冰咒龍") self.ui.label_2.setAlignment(Qt.AlignCenter) self.ui.label_3.setText("冰牙龍") self.ui.label_3.setAlignment(Qt.AlignCenter) self.ui.label_4.setText("冰魚龍") self.ui.label_4.setAlignment(Qt.AlignCenter) self.ui.label_5.setText("凶爪龍") self.ui.label_5.setAlignment(Qt.AlignCenter) self.ui.label_6.setText("古代鹿首精") self.ui.label_6.setAlignment(Qt.AlignCenter) self.ui.label_7.setText("土砂龍") self.ui.label_7.setAlignment(Qt.AlignCenter) self.ui.label_8.setText("大凶豺龍") self.ui.label_8.setAlignment(Qt.AlignCenter) self.ui.label_9.setText("大凶顎龍") self.ui.label_9.setAlignment(Qt.AlignCenter) self.ui.label_10.setText("天地煌啼龍") self.ui.label_10.setAlignment(Qt.AlignCenter) self.ui.label_11.setText("屍套龍") self.ui.label_11.setAlignment(Qt.AlignCenter) self.ui.label_12.setText("岩賊龍") self.ui.label_12.setAlignment(Qt.AlignCenter) self.ui.label_13.setText("恐暴龍") self.ui.label_13.setAlignment(Qt.AlignCenter) self.ui.label_14.setText("慘爪龍") self.ui.label_14.setAlignment(Qt.AlignCenter) self.ui.label_15.setText("斬龍") self.ui.label_15.setAlignment(Qt.AlignCenter) self.ui.label_16.setText("櫻火龍") self.ui.label_16.setAlignment(Qt.AlignCenter) self.ui.label_17.setText("殲世滅盡龍") self.ui.label_17.setAlignment(Qt.AlignCenter) self.ui.label_18.setText("毒妖鳥") self.ui.label_18.setAlignment(Qt.AlignCenter) self.ui.label_19.setText("水妖鳥") self.ui.label_19.setAlignment(Qt.AlignCenter) self.ui.label_20.setText("泥魚龍") self.ui.label_20.setAlignment(Qt.AlignCenter) self.ui.label_21.setText("浮眠龍") self.ui.label_21.setAlignment(Qt.AlignCenter) self.ui.label_22.setText("浮空龍") self.ui.label_22.setAlignment(Qt.AlignCenter) self.ui.label_23.setText("滅盡龍") self.ui.label_23.setAlignment(Qt.AlignCenter) self.ui.label_24.setText("炎妃龍") self.ui.label_24.setAlignment(Qt.AlignCenter) self.ui.label_25.setText("炎王龍") self.ui.label_25.setAlignment(Qt.AlignCenter) self.ui.label_26.setText("熔山龍") self.ui.label_26.setAlignment(Qt.AlignCenter) self.ui.label_27.setText("熔岩龍") self.ui.label_27.setAlignment(Qt.AlignCenter) self.ui.label_28.setText("爆錘龍") self.ui.label_28.setAlignment(Qt.AlignCenter) self.ui.label_29.setText("爆鱗龍") self.ui.label_29.setAlignment(Qt.AlignCenter) self.ui.label_30.setText("猛牛龍") self.ui.label_30.setAlignment(Qt.AlignCenter) self.ui.label_31.setText("痹毒龍") self.ui.label_31.setAlignment(Qt.AlignCenter) self.ui.label_32.setText("眩鳥") self.ui.label_32.setAlignment(Qt.AlignCenter) self.ui.label_33.setText("硫斬龍") self.ui.label_33.setAlignment(Qt.AlignCenter) self.ui.label_34.setText("碎龍") self.ui.label_34.setAlignment(Qt.AlignCenter) self.ui.label_35.setText("絢輝龍") self.ui.label_35.setAlignment(Qt.AlignCenter) self.ui.label_36.setText("蒼火龍") self.ui.label_36.setAlignment(Qt.AlignCenter) self.ui.label_37.setText("蠻顎龍") self.ui.label_37.setAlignment(Qt.AlignCenter) self.ui.label_38.setText("角龍") self.ui.label_38.setAlignment(Qt.AlignCenter) self.ui.label_39.setText("貝希摩斯") self.ui.label_39.setAlignment(Qt.AlignCenter) self.ui.label_40.setText("轟龍") self.ui.label_40.setAlignment(Qt.AlignCenter) self.ui.label_41.setText("迅龍") self.ui.label_41.setAlignment(Qt.AlignCenter) self.ui.label_42.setText("鋼龍") self.ui.label_42.setAlignment(Qt.AlignCenter) self.ui.label_43.setText("雄火龍") self.ui.label_43.setAlignment(Qt.AlignCenter) self.ui.label_44.setText("雌火龍") self.ui.label_44.setAlignment(Qt.AlignCenter) self.ui.label_45.setText("雷顎龍") self.ui.label_45.setAlignment(Qt.AlignCenter) self.ui.label_46.setText("霜翼風漂龍") self.ui.label_46.setAlignment(Qt.AlignCenter) self.ui.label_47.setText("風漂龍") self.ui.label_47.setAlignment(Qt.AlignCenter) self.ui.label_48.setText("飛雷龍") self.ui.label_48.setAlignment(Qt.AlignCenter) self.ui.label_49.setText("骨錘龍") self.ui.label_49.setAlignment(Qt.AlignCenter) self.ui.label_50.setText("鹿首精") self.ui.label_50.setAlignment(Qt.AlignCenter) self.ui.label_51.setText("麒麟") self.ui.label_51.setAlignment(Qt.AlignCenter) self.ui.label_52.setText("黑狼鳥") self.ui.label_52.setAlignment(Qt.AlignCenter) self.ui.label_53.setText("黑角龍") self.ui.label_53.setAlignment(Qt.AlignCenter)
我先定義了所有 QLabel 該顯示的文字。
QPushButton
# Button self.ui.pushButton.setIcon(QIcon('Icon/冥燈龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_2.setIcon(QIcon('Icon/冰咒龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_3.setIcon(QIcon('Icon/冰牙龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_4.setIcon(QIcon('Icon/冰魚龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_5.setIcon(QIcon('Icon/凶爪龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_6.setIcon(QIcon('Icon/古代鹿首精.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_7.setIcon(QIcon('Icon/土砂龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_8.setIcon(QIcon('Icon/大凶豺龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_9.setIcon(QIcon('Icon/大凶顎龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_10.setIcon(QIcon('Icon/天地煌啼龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_11.setIcon(QIcon('Icon/屍套龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_12.setIcon(QIcon('Icon/岩賊龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_13.setIcon(QIcon('Icon/恐暴龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_14.setIcon(QIcon('Icon/慘爪龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_15.setIcon(QIcon('Icon/斬龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_16.setIcon(QIcon('Icon/櫻火龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_17.setIcon(QIcon('Icon/殲世滅盡龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_18.setIcon(QIcon('Icon/毒妖鳥.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_19.setIcon(QIcon('Icon/水妖鳥.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_20.setIcon(QIcon('Icon/泥魚龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_21.setIcon(QIcon('Icon/浮眠龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_22.setIcon(QIcon('Icon/浮空龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_23.setIcon(QIcon('Icon/滅盡龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_24.setIcon(QIcon('Icon/炎妃龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_25.setIcon(QIcon('Icon/炎王龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_26.setIcon(QIcon('Icon/熔山龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_27.setIcon(QIcon('Icon/熔岩龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_28.setIcon(QIcon('Icon/爆錘龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_29.setIcon(QIcon('Icon/爆鱗龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_30.setIcon(QIcon('Icon/猛牛龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_31.setIcon(QIcon('Icon/痹毒龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_32.setIcon(QIcon('Icon/眩鳥.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_33.setIcon(QIcon('Icon/硫斬龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_34.setIcon(QIcon('Icon/碎龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_35.setIcon(QIcon('Icon/絢輝龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_36.setIcon(QIcon('Icon/蒼火龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_37.setIcon(QIcon('Icon/蠻顎龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_38.setIcon(QIcon('Icon/角龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_39.setIcon(QIcon('Icon/貝希摩斯.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_40.setIcon(QIcon('Icon/轟龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_41.setIcon(QIcon('Icon/迅龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_42.setIcon(QIcon('Icon/鋼龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_43.setIcon(QIcon('Icon/雄火龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_44.setIcon(QIcon('Icon/雌火龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_45.setIcon(QIcon('Icon/雷顎龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_46.setIcon(QIcon('Icon/霜翼風漂龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_47.setIcon(QIcon('Icon/風漂龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_48.setIcon(QIcon('Icon/飛雷龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_49.setIcon(QIcon('Icon/骨錘龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_50.setIcon(QIcon('Icon/鹿首精.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_51.setIcon(QIcon('Icon/麒麟.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_52.setIcon(QIcon('Icon/黑狼鳥.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100)) self.ui.pushButton_53.setIcon(QIcon('Icon/黑角龍.jpg')) self.ui.pushButton.setIconSize(QSize(100, 100))
第二部份則是定義所有 QPushButton 應該要有的圖片,這裡我是放入我在 Icon 這個資料夾底下的所有圖片。
看起來就是這個樣子了!
Button Events
緊接著,我們來定義每個按鈕觸發的事件。在這裡我是全部寫在一個 function 裡面,由傳給這個 function 的數值來決定到底顯示哪種魔物的弱點屬性。
# Button Events self.ui.pushButton.clicked.connect(lambda: self.setIcon(1)) self.ui.pushButton_2.clicked.connect(lambda: self.setIcon(2)) self.ui.pushButton_3.clicked.connect(lambda: self.setIcon(3)) self.ui.pushButton_4.clicked.connect(lambda: self.setIcon(4)) self.ui.pushButton_5.clicked.connect(lambda: self.setIcon(5)) self.ui.pushButton_6.clicked.connect(lambda: self.setIcon(6)) self.ui.pushButton_7.clicked.connect(lambda: self.setIcon(7)) self.ui.pushButton_8.clicked.connect(lambda: self.setIcon(8)) self.ui.pushButton_9.clicked.connect(lambda: self.setIcon(9)) self.ui.pushButton_10.clicked.connect(lambda: self.setIcon(10)) self.ui.pushButton_11.clicked.connect(lambda: self.setIcon(11)) self.ui.pushButton_12.clicked.connect(lambda: self.setIcon(12)) self.ui.pushButton_13.clicked.connect(lambda: self.setIcon(13)) self.ui.pushButton_14.clicked.connect(lambda: self.setIcon(14)) self.ui.pushButton_15.clicked.connect(lambda: self.setIcon(15)) self.ui.pushButton_16.clicked.connect(lambda: self.setIcon(16)) self.ui.pushButton_17.clicked.connect(lambda: self.setIcon(17)) self.ui.pushButton_18.clicked.connect(lambda: self.setIcon(18)) self.ui.pushButton_19.clicked.connect(lambda: self.setIcon(19)) self.ui.pushButton_20.clicked.connect(lambda: self.setIcon(20)) self.ui.pushButton_21.clicked.connect(lambda: self.setIcon(21)) self.ui.pushButton_22.clicked.connect(lambda: self.setIcon(22)) self.ui.pushButton_23.clicked.connect(lambda: self.setIcon(23)) self.ui.pushButton_24.clicked.connect(lambda: self.setIcon(24)) self.ui.pushButton_25.clicked.connect(lambda: self.setIcon(25)) self.ui.pushButton_26.clicked.connect(lambda: self.setIcon(26)) self.ui.pushButton_27.clicked.connect(lambda: self.setIcon(27)) self.ui.pushButton_28.clicked.connect(lambda: self.setIcon(28)) self.ui.pushButton_29.clicked.connect(lambda: self.setIcon(29)) self.ui.pushButton_30.clicked.connect(lambda: self.setIcon(30)) self.ui.pushButton_31.clicked.connect(lambda: self.setIcon(31)) self.ui.pushButton_32.clicked.connect(lambda: self.setIcon(32)) self.ui.pushButton_33.clicked.connect(lambda: self.setIcon(33)) self.ui.pushButton_34.clicked.connect(lambda: self.setIcon(34)) self.ui.pushButton_35.clicked.connect(lambda: self.setIcon(35)) self.ui.pushButton_36.clicked.connect(lambda: self.setIcon(36)) self.ui.pushButton_37.clicked.connect(lambda: self.setIcon(37)) self.ui.pushButton_38.clicked.connect(lambda: self.setIcon(38)) self.ui.pushButton_39.clicked.connect(lambda: self.setIcon(39)) self.ui.pushButton_40.clicked.connect(lambda: self.setIcon(40)) self.ui.pushButton_41.clicked.connect(lambda: self.setIcon(41)) self.ui.pushButton_42.clicked.connect(lambda: self.setIcon(42)) self.ui.pushButton_43.clicked.connect(lambda: self.setIcon(43)) self.ui.pushButton_44.clicked.connect(lambda: self.setIcon(44)) self.ui.pushButton_45.clicked.connect(lambda: self.setIcon(45)) self.ui.pushButton_46.clicked.connect(lambda: self.setIcon(46)) self.ui.pushButton_47.clicked.connect(lambda: self.setIcon(47)) self.ui.pushButton_48.clicked.connect(lambda: self.setIcon(48)) self.ui.pushButton_49.clicked.connect(lambda: self.setIcon(49)) self.ui.pushButton_50.clicked.connect(lambda: self.setIcon(50)) self.ui.pushButton_51.clicked.connect(lambda: self.setIcon(51)) self.ui.pushButton_52.clicked.connect(lambda: self.setIcon(52)) self.ui.pushButton_53.clicked.connect(lambda: self.setIcon(53))
使用 lambda,好讓我們可以傳參數進入我們的 function。至於我們設定的 self.setIcon()
其實我當初命名有點不清楚,這個我要反省,當初寫的時候其實想得是要顯示該魔物的弱點圖片。
self.setIcon() 就是我們所有按鈕按下去後會觸發的事件。
跳出子視窗、顯示圖片
接著來到了最後的關頭,我們來定義我們觸發的 function 裡頭的功能。
def setIcon(self, index): if index == 1: self.newWindow = sub_MainWindow("冥燈龍.jpg") elif index == 2: self.newWindow = sub_MainWindow("冰咒龍.jpg") elif index == 3: self.newWindow = sub_MainWindow("冰牙龍.jpg") elif index == 4: self.newWindow = sub_MainWindow("冰魚龍.jpg") elif index == 5: self.newWindow = sub_MainWindow("凶爪龍.jpg") elif index == 6: self.newWindow = sub_MainWindow("古代鹿首精.jpg") elif index == 7: self.newWindow = sub_MainWindow("土砂龍.jpg") elif index == 8: self.newWindow = sub_MainWindow("大凶豺龍.jpg") elif index == 9: self.newWindow = sub_MainWindow("大凶顎龍.jpg") elif index == 10: self.newWindow = sub_MainWindow("天地煌啼龍.jpg") elif index == 11: self.newWindow = sub_MainWindow("屍套龍.jpg") elif index == 12: self.newWindow = sub_MainWindow("岩賊龍.jpg") elif index == 13: self.newWindow = sub_MainWindow("恐暴龍.jpg") elif index == 14: self.newWindow = sub_MainWindow("慘爪龍.jpg") elif index == 15: self.newWindow = sub_MainWindow("斬龍.jpg") elif index == 16: self.newWindow = sub_MainWindow("櫻火龍.jpg") elif index == 17: self.newWindow = sub_MainWindow("殲世滅盡龍.jpg") elif index == 18: self.newWindow = sub_MainWindow("毒妖鳥.jpg") elif index == 19: self.newWindow = sub_MainWindow("水妖鳥.jpg") elif index == 20: self.newWindow = sub_MainWindow("泥魚龍.jpg") elif index == 21: self.newWindow = sub_MainWindow("浮眠龍.jpg") elif index == 22: self.newWindow = sub_MainWindow("浮空龍.jpg") elif index == 23: self.newWindow = sub_MainWindow("滅盡龍.jpg") elif index == 24: self.newWindow = sub_MainWindow("炎妃龍.jpg") elif index == 25: self.newWindow = sub_MainWindow("炎王龍.jpg") elif index == 26: self.newWindow = sub_MainWindow("熔山龍.jpg") elif index == 27: self.newWindow = sub_MainWindow("熔岩龍.jpg") elif index == 28: self.newWindow = sub_MainWindow("爆錘龍.jpg") elif index == 29: self.newWindow = sub_MainWindow("爆鱗龍.jpg") elif index == 30: self.newWindow = sub_MainWindow("猛牛龍.jpg") elif index == 31: self.newWindow = sub_MainWindow("痹毒龍.jpg") elif index == 32: self.newWindow = sub_MainWindow("眩鳥.jpg") elif index == 33: self.newWindow = sub_MainWindow("硫斬龍.jpg") elif index == 34: self.newWindow = sub_MainWindow("碎龍.jpg") elif index == 35: self.newWindow = sub_MainWindow("絢輝龍.jpg") elif index == 36: self.newWindow = sub_MainWindow("蒼火龍.jpg") elif index == 37: self.newWindow = sub_MainWindow("蠻顎龍.jpg") elif index == 38: self.newWindow = sub_MainWindow("角龍.jpg") elif index == 39: self.newWindow = sub_MainWindow("貝希摩斯.jpg") elif index == 40: self.newWindow = sub_MainWindow("轟龍.jpg") elif index == 41: self.newWindow = sub_MainWindow("迅龍.jpg") elif index == 42: self.newWindow = sub_MainWindow("鋼龍.jpg") elif index == 43: self.newWindow = sub_MainWindow("雄火龍.jpg") elif index == 44: self.newWindow = sub_MainWindow("雌火龍.jpg") elif index == 45: self.newWindow = sub_MainWindow("雷顎龍.jpg") elif index == 46: self.newWindow = sub_MainWindow("霜翼風漂龍.jpg") elif index == 47: self.newWindow = sub_MainWindow("風漂龍.jpg") elif index == 48: self.newWindow = sub_MainWindow("飛雷龍.jpg") elif index == 49: self.newWindow = sub_MainWindow("骨錘龍.jpg") elif index == 50: self.newWindow = sub_MainWindow("鹿首精.jpg") elif index == 51: self.newWindow = sub_MainWindow("麒麟.jpg") elif index == 52: self.newWindow = sub_MainWindow("黑狼鳥.jpg") elif index == 53: self.newWindow = sub_MainWindow("黑角龍.jpg") self.newWindow.show()
基本上就是設定不同的數值來傳入不同的圖片,然後顯示子視窗。
子視窗的 class 繼承如下:(繼承我們當初定義的第二個 GUI)
class sub_MainWindow(QMainWindow): def __init__(self, pic): super(sub_MainWindow, self).__init__() self.ui = Ui_MainWindow_sub() self.ui.setupUi(self) self.ui.label.setPixmap(QPixmap('pic/%s' % pic)) self.ui.label.setScaledContents(True)
基本上只是依照我所傳入的 pic 變數,來決定我該顯示在 pic 這個資料夾(不是剛才的變數)底下我所選擇的照片。
if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() sys.exit(app.exec_())
最後,一如既往地讓我們的 GUI 能正常開始運作,一切都大功告成了。
程式碼自動生成的部份
看完了剛剛以上的程式碼,想必各位一定很疑惑:這樣一個個照片、按鈕、標籤照著輸入,不是花掉很多時間嗎?
其實有時候我會讓程式自動生成程式碼,尤其是這種需要大量重複設定的程式碼。
我先說明一下,剛剛那些很大量的程式碼其實分成四大部份:
- QLabel 的定義
- QPushButton 的縮圖設定
- QPushButton 的事件觸發 (需給予不同的 id)
- function 所需要的不同圖片 (依照不同 id 給予不同圖片)
這部份其實我都用程式完成了,而且程式短得讓人驚訝。
事先聲明,我程式當中一共有 pic 以及 icon 兩個資料夾,這裡頭會放著依照魔物命名的 JPG 檔,最後我會放上我的 Github 連結,大家可以在裡面找到。(接下來我預計會不斷更新的)
# -*- coding: utf-8 -*- import os import re picList = os.listdir('pic/') IconList = os.listdir('Icon/')
首先我 import 了兩個 Python 自帶的套件,使用 os 來顯示我 pic 資料夾、Icon 資料夾底下的所有檔案,並將它們分別存入變數 picList 以及 IconList。
def auto_label(): n = 0 for pic in picList: for icon in IconList: if pic == icon: n += 1 if n == 1: print('self.ui.label.setText("%s")\nself.ui.label.setAlignment(Qt.AlignCenter)' % re.sub('.jpg', '', pic)) else: print('self.ui.label_%s.setText("%s")\nself.ui.label_%s.setAlignment(Qt.AlignCenter)' % (n, re.sub('.jpg', '', pic), n))
使用 for 迴圈依序存取 picList 以及 IconList 底下的檔案,如有相同的便開始執行程式碼(因為裡頭有多出來的檔案,並不是每隻魔物都一定會有相應的圖片),然後自動產生 QLabel。
def auto_pushbutton(): n = 0 for pic in picList: for icon in IconList: if pic == icon: n += 1 if n == 1: print("self.ui.pushButton.setIcon(QIcon('Icon/%s'))\nself.ui.pushButton.setIconSize(QSize(100, 100))" % pic) else: print("self.ui.pushButton_%s.setIcon(QIcon('Icon/%s'))\nself.ui.pushButton.setIconSize(QSize(100, 100))" % (n, pic))
依此類推產生 QPushButton。
def auto_ButtonClicked(): n = 0 for pic in picList: for icon in IconList: if pic == icon: n += 1 if n == 1: print('self.ui.pushButton.clicked.connect(lambda: self.setIcon(%s))' % n) else: print('self.ui.pushButton_%s.clicked.connect(lambda: self.setIcon(%s))' % (n, n))
依此類推寫下每個按鈕給予事件的不同 id。
def auto_Event(): n = 0 for pic in picList: for icon in IconList: if pic == icon: n += 1 if n == 1: print('if index == %s:\n self.newWindow = sub_MainWindow("%s")' % (n, pic)) else: print('elif index == %s:\n self.newWindow = sub_MainWindow("%s")' % (n, pic))
依此類推寫下不同 id 時顯示的不同圖片設定。
以上,我用程式循環生產這四個部份的程式碼,並且將其複製到當初設定繼承圖形界面的地方。
這次執行程式,我們應該可以看到我們的魔物弱點屬性已經完成了。
有著像這個界面。
點擊之後會產生相應魔物的弱點圖片(這裡是官方所給的弱點圖片)。
而且找到魔物、點擊的速度非常快,目前有用過的朋友(其實包括我大概才 4 人左右哈哈哈) 都表示這比找網頁快,當然我個人私心也這麼覺得。
後記
那麼,這此這個簡單的教學已經告一段落了。老實說我很猶豫這要不要併入 PyQt5 的下一次教學,並詳細解說如何在程式碼中呼叫另一個界面。但想想這件事情其實滿簡單的,大家應該摸熟 PyQt5 之後都做得到,我有點像是在廢話 XD
另外,就是我魔物獵人玩太勤了,很想趕快寫一套充實、堪用的配裝器 XDDD 只好先拿這個練練手。
那麼,若想查看完整的程式碼,歡迎來我的 Github 看看: https://github.com/ccs96307/MonsterHunterRaiders
以後若是真的有寫出配裝器,我也會分享在這裡的,希望哪個大神能夠整理好 Monster Hunter World: Iceborne 的各種裝備資料!