1. 程式人生 > >專案小程式筆記

專案小程式筆記

宣告:只是為了記錄我遇到的一些問題,其中有我理解錯的望勿參考。

(1)qt designer設計好視窗

主視窗:

登入視窗:

關於qt designer的使用,大可以百度,很簡單的,要注意的是部件的引數要會調整。

有一點要說一下,就是我們建的部件怎樣適合視窗,也就是放大跟著放大,縮小跟著縮小。我的主視窗設定了,但是登入介面就沒有設定。

這個操作就是在qt designer裡面,選中main window然後為頂層也就是main window設定一個lay out,至於設定什麼型別的,取決於個人需要。

(2)pycharm將ui檔案生成.py檔案--生成程式碼。

pycharm真的是一款好用的python開發軟體,推薦使用。

要轉化,我們需要新增一個外部工具。在file—setting裡面有個external tools,我們新增一個pyuic工具就可以轉化了。(點選+好就可以新增)我是已經新增好了。

簡單配置pyuic教程:這也是我在一篇部落格看到的,很簡單

在編輯工具對話方塊裡填寫
名稱 PyUIC
描述 File of .ui be convert to .py
程式 選擇python.exe的檔案路徑
引數 填寫括號裡面的程式碼(-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py)

工作目錄:
選擇ui檔案存放的目錄!!!


選擇ui檔案存放的目錄!!!
選擇ui檔案存放的目錄!!!
或者是,寫成專案的目錄,每次換了新專案就改地址!!!

然後將ui檔案轉換為.py檔案:選中ui檔案,右鍵,external tools,pyuic就可以了(當然,是在pycharm操作)

下面是我的專案轉化的程式碼:

主視窗:

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

# Form implementation generated from reading ui file 'mymain.ui'
#
# Created by: PyQt5 UI code generator 5.11.2
#
# 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(875, 696) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("csd.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout_4 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_4.setObjectName("gridLayout_4") self.label = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) self.label.setSizePolicy(sizePolicy) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.gridLayout_4.addWidget(self.label, 0, 2, 1, 1) self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.textBrowser.sizePolicy().hasHeightForWidth()) self.textBrowser.setSizePolicy(sizePolicy) self.textBrowser.setObjectName("textBrowser") self.gridLayout_4.addWidget(self.textBrowser, 1, 2, 7, 1) self.label_3 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) self.label_3.setSizePolicy(sizePolicy) self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.gridLayout_4.addWidget(self.label_3, 2, 0, 1, 1) self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setObjectName("pushButton") self.gridLayout_4.addWidget(self.pushButton, 3, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(200, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem, 7, 0, 1, 1) self.label_4 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth()) self.label_4.setSizePolicy(sizePolicy) self.label_4.setAlignment(QtCore.Qt.AlignCenter) self.label_4.setObjectName("label_4") self.gridLayout_4.addWidget(self.label_4, 1, 1, 1, 1) self.label_5 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth()) self.label_5.setSizePolicy(sizePolicy) self.label_5.setAlignment(QtCore.Qt.AlignCenter) self.label_5.setObjectName("label_5") self.gridLayout_4.addWidget(self.label_5, 2, 1, 1, 1) self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setObjectName("pushButton_2") self.gridLayout_4.addWidget(self.pushButton_2, 3, 1, 1, 1) self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_4.setObjectName("pushButton_4") self.gridLayout_4.addWidget(self.pushButton_4, 4, 0, 1, 1) self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_3.setObjectName("pushButton_3") self.gridLayout_4.addWidget(self.pushButton_3, 4, 1, 1, 1) self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.comboBox_2.sizePolicy().hasHeightForWidth()) self.comboBox_2.setSizePolicy(sizePolicy) self.comboBox_2.setObjectName("comboBox_2") self.gridLayout_4.addWidget(self.comboBox_2, 0, 1, 1, 1) self.comboBox = QtWidgets.QComboBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.comboBox.sizePolicy().hasHeightForWidth()) self.comboBox.setSizePolicy(sizePolicy) self.comboBox.setEditable(False) self.comboBox.setCurrentText("") self.comboBox.setObjectName("comboBox") self.gridLayout_4.addWidget(self.comboBox, 0, 0, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(200, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem1, 7, 1, 1, 1) self.label_2 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) self.label_2.setSizePolicy(sizePolicy) self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.gridLayout_4.addWidget(self.label_2, 1, 0, 1, 1) self.label_6 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth()) self.label_6.setSizePolicy(sizePolicy) self.label_6.setAlignment(QtCore.Qt.AlignCenter) self.label_6.setObjectName("label_6") self.gridLayout_4.addWidget(self.label_6, 6, 0, 1, 1) self.label_7 = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth()) self.label_7.setSizePolicy(sizePolicy) self.label_7.setAlignment(QtCore.Qt.AlignCenter) self.label_7.setObjectName("label_7") self.gridLayout_4.addWidget(self.label_7, 6, 1, 1, 1) MainWindow.setCentralWidget(self.centralwidget) 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", "菜芽")) self.label.setText(_translate("MainWindow", "預覽文字")) self.label_3.setText(_translate("MainWindow", "**")) self.pushButton.setText(_translate("MainWindow", "輸入端確定")) self.label_4.setText(_translate("MainWindow", "輸出端")) self.label_5.setText(_translate("MainWindow", "**")) self.pushButton_2.setText(_translate("MainWindow", "輸出端確定")) self.pushButton_4.setText(_translate("MainWindow", "刪除一點")) self.pushButton_3.setText(_translate("MainWindow", "生成文字")) self.label_2.setText(_translate("MainWindow", "輸入端")) self.label_6.setText(_translate("MainWindow", "TextLabel")) self.label_7.setText(_translate("MainWindow", "TextLabel"))

 

登入視窗:

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

# Form implementation generated from reading ui file 'caiya.ui'
#
# Created by: PyQt5 UI code generator 5.11.2
#
# 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(297, 147)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 251, 53))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.label_2 = QtWidgets.QLabel(self.layoutWidget)
        self.label_2.setObjectName("label_2")
        self.verticalLayout.addWidget(self.label_2)
        self.horizontalLayout.addLayout(self.verticalLayout)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout_2.addWidget(self.lineEdit)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout_2.addWidget(self.lineEdit_2)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget1.setGeometry(QtCore.QRect(50, 90, 195, 30))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget1)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.pushButton = QtWidgets.QPushButton(self.layoutWidget1)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout_2.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget1)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout_2.addWidget(self.pushButton_2)
        MainWindow.setCentralWidget(self.centralwidget)
        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", "菜芽"))
        self.label.setText(_translate("MainWindow", "賬號"))
        self.label_2.setText(_translate("MainWindow", "密碼"))
        self.lineEdit.setPlaceholderText(_translate("MainWindow", "請輸入賬號"))
        self.lineEdit_2.setPlaceholderText(_translate("MainWindow", "請輸入密碼"))
        self.pushButton.setText(_translate("MainWindow", "確定"))
        self.pushButton_2.setText(_translate("MainWindow", "取消"))

這個程式碼我一般是不會改動操作它的,會新建一個.py檔案,在裡面操作。也就是視窗和邏輯分開。

(3)邏輯程式碼編寫:

在這裡,我建立了三個類;

1,QMessageBox

PyQt5中為我們提供了很多預設資訊框QMessageBox。使用參考程式碼就ok了。

QMessageBox對話方塊包含型別只是圖示不同其他無太大差別:
     QMessageBox.information 資訊框
     QMessageBox.question 問答框
     QMessageBox.warning 警告
     QMessageBox.ctitical危險
     QMessageBox.about 關於

class MainWindow(QtWidgets.QMainWindow):
    """對QMainWindow類重寫,實現一些功能"""

    def closeEvent(self, event):
        """
        重寫closeEvent方法,實現QMainWindow窗體關閉時執行一些程式碼
        :param event: close()觸發的事件
        :return: None
        """
        reply = QtWidgets.QMessageBox.question(self,
                                                   '本程式',
                                                   "是否要退出程式?",
                                                   QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                                   QtWidgets.QMessageBox.No)
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
            os.remove('socket_one.png')  # 刪除圖片
            os.remove('socket_two.jpg')
            os.remove('csd.ico')
        else:
            event.ignore()

這個類,我是為了實現關閉視窗是,會顯示一個提示視窗,所以從新定義了closeEvent()方法。在原本的方法中,是直接關閉,但是我不想

相當於我新建了一個QtWidgets.QMainWindow類,名字叫MainWindow,它繼承了QtWidgets.QMainWindow的所有方法,但是自己定義了一個closeEvent(),在繼承的概念中,這種情況我理解的是,

在我們MainWindow類中,跟QtWidgets.QMainWindow類是一樣的,差別在於closeEvent()方法不一樣。MainWindow以自己的closeEvent()方法處理問題,將QtWidgets.QMainWindow類中的closeEvent()方法覆蓋,但是QtWidgets.QMainWindow類closeEvent()方法沒有變。

2,登入:

 

class my_loginwindow(object):
    def __init__(self):
        #PyQt5中,每個應用程式都必須例項化一個QApplication():
        app = QApplication(sys.argv)

        login_MainWindow = QMainWindow()
        self.login_ui = caiya.Ui_MainWindow()
        self.login_ui.setupUi(login_MainWindow)

        self.click_pushbutton(login_MainWindow)


        #呼叫QWidget物件的show()方法將建立的視窗顯示出來
        #呼叫應用程式物件的exec_()方法來執行程式的主迴圈,並使用sys.exit()方法確保程式能夠完美的退出。
        login_MainWindow.show()
        sys.exit(app.exec_())

    def click_pushbutton(self,login_MainWindow):
        self.login_ui.pushButton.clicked.connect(lambda:self.word_get(login_MainWindow))
        self.login_ui.pushButton_2.clicked.connect(login_MainWindow.close)

    def word_get(self,login_MainWindow):
        login_user = self.login_ui.lineEdit.text()
        login_password = self.login_ui.lineEdit_2.text()
        if login_user == '菜芽' and login_password == '123456':
            my_mainwindow()
            login_MainWindow.close()
        else:
            QMessageBox.warning(login_MainWindow, "警告", "使用者名稱或密碼錯誤!", QMessageBox.Yes)
        self.login_ui.lineEdit.setFocus()

 

這裡有幾點要講解的是,我們在槽函式中要使用一個引數,而這個引數我們的訊號傳送者傳送的訊號沒有這個引數時,我們就得自己傳遞進來。但是比如這個self.login_ui.pushButton_2.clicked.connect(login_MainWindow.close),一般括號裡的槽函式是不能帶引數的,不然會出錯。這是我們就需要使用lambda關鍵字了。

格式像這樣:self.login_ui.pushButton.clicked.connect(lambda:self.word_get(login_MainWindow))

而槽函式的定義這裡這樣寫就ok:def word_get(self,login_MainWindow):

這樣我們就可以在槽函式裡使用我們需要的引數了。

比如這個:

在槽函式中,比如login_user 這種,是區域性變數,只能在函式內部使用,我們也得注意。

在這個函式裡面,當滿足條件,我們就關閉視窗,然後開啟主視窗。

這裡的說明一下:

my_mainwindow()裡面的初始化方法裡,我們的注意一下:
#app = QApplication(sys.argv)

#sys.exit(app.exec_())

如果有這兩個程式碼,要註釋掉,因為登入的初始化方法裡面已經存在了,這是我們程式需要的程式碼,不是視窗需要的程式碼,所以一個程式有一個就夠了。至於這兩個程式碼的功能,看註釋就懂了。
還要就是要這樣實現關閉登入視窗,開啟主視窗,我們的主視窗必須要包含下面的機制:
self.click_pushbutton(myMainWindow)//在初始化方法中

def click_pushbutton(self,myMainWindow):
     self.myui.pushButton.clicked.connect(lambda: self.ino(myMainWindow))

def ino(self,myMainWindow):
     self.myui.label_4.setText('take in the sun')

也就是要有這種,ino都可以不要,這樣在主視窗不點選按鈕就不會出錯,而且主視窗也會完美顯示出來,執行正常。

具體為什麼我也不知道,沒搞明白,但是沒有這種操作,主視窗就會開啟失敗,程式出問題。

有大佬知道,可以告知一下,萬分感謝!!!!!!

3,主視窗:

class my_mainwindow(object):
    def __init__(self):
        #PyQt5中,每個應用程式都必須例項化一個QApplication():
        #app = QApplication(sys.argv)
        tmp = open('socket_one.png', 'wb')  # 解碼圖片資料,儲存圖片
        tmp.write(base64.b64decode(socket_one))

        tmp = open('socket_two.jpg', 'wb')
        tmp.write(base64.b64decode(socket_two))

        tmp = open('csd.ico', 'wb')
        tmp.write(base64.b64decode(socket_three))

        tmp.close()  # 現在就能用了,用完(載入到程式裡之後)刪了就好os.remove(‘socket.png’)

        myMainWindow =MainWindow()
        self.myui = mymain.Ui_MainWindow()
        self.myui.setupUi(myMainWindow)
        #********************************************************************************
        self.infomation = ["1", "2", "3", "4"]
        self.print_list=[]
        self.already_used_list=[]
        #標誌輸入確定鍵按下
        self.flag_2=0

        self.myui.comboBox.addItems(self.infomation)
        self.myui.comboBox_2.addItems(self.infomation)

        self.click_pushbutton(myMainWindow)

        png = QtGui.QPixmap()  # 建立一個繪圖類
        png.load("socket_one.png")  # 從png中載入一個圖片
        self.myui.label_6.setPixmap(png)  # 設定文字標籤的圖形
        self.myui.label_6.setScaledContents(True)
        png.load("socket_two.jpg")  # 從png中載入一個圖片
        self.myui.label_7.setPixmap(png)  # 設定文字標籤的圖形
        self.myui.label_7.setScaledContents(True)

        #********************************************************************************
        #呼叫QWidget物件的show()方法將建立的視窗顯示出來
        #呼叫應用程式物件的exec_()方法來執行程式的主迴圈,並使用sys.exit()方法確保程式能夠完美的退出。
        myMainWindow.show()
        #sys.exit(app.exec_())


    def click_pushbutton(self,myMainWindow):
        self.myui.pushButton.clicked.connect(lambda :self.input_label_1(myMainWindow))
        self.myui.pushButton_2.clicked.connect(lambda:self.output_label_2(myMainWindow))
        self.myui.pushButton_4.clicked.connect(self.delete_one)
        self.myui.pushButton_3.clicked.connect(lambda :self.print_data(myMainWindow))

    def input_label_1(self,myMainWindow):
        input_str=self.myui.comboBox.currentText()
        len_input_str=len(self.already_used_list)
        flag=0
        self.flag_2=1
        if len_input_str>0:
            for i in self.already_used_list:
                if i==input_str:
                    flag=1
            if flag==1:
                QMessageBox.warning(myMainWindow, "警告", "這個點已經使用過了", QMessageBox.Yes)
            else:
                self.already_used_list.append(input_str)
                self.myui.label_3.setText(input_str)
        else:
            self.already_used_list.append(input_str)
            self.myui.label_3.setText(input_str)

    def output_label_2(self,myMainWindow):
        your_input=self.myui.label_3.text()
        your_output=self.myui.comboBox_2.currentText()
        len_output=len(self.already_used_list)
        flag_1=0
        if self.flag_2==1:
            self.flag_2=0
            if your_input == '**':
                QMessageBox.warning(myMainWindow, "警告", "輸入未定義", QMessageBox.Yes)
                self.flag_2 = 1
            elif your_input == your_output:
                QMessageBox.warning(myMainWindow, "警告", "輸入輸出同點", QMessageBox.Yes)
                self.flag_2 = 1
            else:
                if len_output > 0:
                    for i in self.already_used_list:
                        if i==your_output:
                            flag_1=1
                    if flag_1==1:
                        QMessageBox.warning(myMainWindow, "警告", "這個點已經使用過了", QMessageBox.Yes)
                        self.flag_2 = 1
                    else:
                        self.already_used_list.append(your_output)
                        self.myui.label_5.setText('%s-%s' % (your_input, your_output))
                        self.print_list.append('set_location_assignment  PIN_P1 -to in%s' % your_input)
                        self.print_list.append('set_location_assignment  PIN_P2 -to in%s' % your_output)
                        self.myui.textBrowser.clear()
                        for i in self.print_list:
                            self.myui.textBrowser.append(i)
                else:
                    self.already_used_list.append(your_output)
                    self.myui.label_5.setText('%s-%s'%(your_input,your_output))
                    self.print_list.append('set_location_assignment  PIN_P1 -to in%s'%your_input)
                    self.print_list.append('set_location_assignment  PIN_P2 -to in%s'%your_output)
                    self.myui.textBrowser.clear()
                    for i in self.print_list:
                        self.myui.textBrowser.append(i)
        elif self.flag_2==0:
            QMessageBox.warning(myMainWindow, "警告", "還沒定義輸入", QMessageBox.Yes)

    def delete_one(self):
        len_print_list=len(self.print_list)
        print(len_print_list)
        if len_print_list>0:
            del self.print_list[len_print_list-1]
            del self.print_list[len_print_list - 2]
            del  self.already_used_list[len_print_list-1]
            del self.already_used_list[len_print_list - 2]
        self.myui.textBrowser.clear()
        for i in self.print_list:
            self.myui.textBrowser.append(i)

    def print_data(self,myMainWindow):
        with open('set_t.tcl', 'a+') as my_f:
            my_f.write('xixi')
        os.remove('set_t.tcl')
        with open('set_t.tcl','a+') as my_f:
            my_f.write(self.myui.textBrowser.toPlainText())
        QMessageBox.information(myMainWindow, "提示", "文件ok了", QMessageBox.Yes)

注意,這裡我們使用的就是我們自己建的視窗類建立了myMainWindow實體。

這裡還想解釋一下__init__方法,是當我們建立這個類的實體時,就會執行這個方法,自動執行。

用with open這種方法去開啟檔案,執行完操作後會自動呼叫close()函式,推薦使用。

if __name__ == "__main__":

    my_loginwindow()

這裡的if __name__ == "__main__":使用:

是當這個檔案作為主類似於主模組使用時,才會執行後面的程式碼,當是已呼叫的方式使用時,就不會執行裡面的程式碼。

 訊號與槽機制:是一種高階介面,應用於物件之間通訊,它是qt的核心特徵。

  例如:功能,按鈕點選之後關閉視窗

   流程:按鈕是訊號傳送者,當點選按鈕之後會發送一個訊號出去,通過這段程式碼的內部通訊機制,知道這個按鈕的點選事件被連結到窗體的關閉事件上去,然後通知接受者窗體,你該執行槽函式close了。

其他的就是一些基本的使用了,圖片處理可以參考以前的部落格,檔案操作啊,list變數的使用啊,for迴圈啊等參考百度,基本上看一遍就會了的。

打包程式也是可以參考以前的部落格