欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python PyQt5實(shí)戰(zhàn)項(xiàng)目之查詢器的實(shí)現(xiàn)流程詳解

 更新時(shí)間:2021年11月09日 10:47:50   作者:不俠居  
PyQt5以一套Python模塊的形式來實(shí)現(xiàn)功能。它包含了超過620個(gè)類,600個(gè)方法和函數(shù)。它是一個(gè)多平臺(tái)的工具套件,它可以運(yùn)行在所有的主流操作系統(tǒng)中,包含Unix,Windows和Mac OS。PyQt5采用雙重許可模式。開發(fā)者可以在GPL和社區(qū)授權(quán)之間選擇

簡介

這是一個(gè)操作數(shù)據(jù)庫(sqlite3)的項(xiàng)目,用PyQt5進(jìn)行界面封裝。
此次項(xiàng)目最主要的是,主界面與子界面的交互,一個(gè)主界面與三個(gè)子界面交互
可以添加數(shù)據(jù),修改數(shù)據(jù),刪除數(shù)據(jù)

主界面

class MainWidget(QMainWindow):
    def __init__(self):
        super(MainWidget,self).__init__()
        self.ui_init()
        self.connect_init()
        self.sql_init()

    def ui_init(self):
        self.setWindowTitle('信息查詢')
        self.resize(600,700)

        self.addwidget = AddWidget()
        self.deletewidget = DeleteWidget()
        self.updatewidget = UpdateWidget()

        self.show_view = QTextBrowser()
        self.find_text = QLineEdit()
        
        self.find_btn = QPushButton()
        self.find_btn.setText('查詢')
        self.update_btn = QPushButton()
        self.update_btn.setText('更改')
        self.delete_btn = QPushButton()
        self.delete_btn.setText('刪除')
        self.add_btn = QPushButton()
        self.add_btn.setText('添加')

        self.status_bar = self.statusBar()
        self.widget = QWidget()

        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.find_text)
        self.h1_layout.addWidget(self.find_btn)
        self.h2_layout.addWidget(self.update_btn)
        self.h2_layout.addWidget(self.delete_btn)
        self.h2_layout.addWidget(self.add_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addWidget(self.show_view)

        self.widget.setLayout(self.v_layout)
        self.setCentralWidget(self.widget)


    def connect_init(self):
        '''
        信號(hào)與槽
        '''
        '''查詢功能'''
        self.find_btn.clicked.connect(lambda:self.find_slot(self.find_text.text()))

        '''添加功能'''
        self.add_btn.clicked.connect(self.add_slot)
        self.addwidget.add_close_signal.connect(lambda:self.setEnabled(True))
        self.addwidget.add_start_signal.connect(self.add_start_slot)
        
        '''刪除功能'''
        self.delete_btn.clicked.connect(self.delete_slot)
        self.deletewidget.delete_close_signal.connect(lambda:self.setEnabled(True))
        self.deletewidget.delete_start_signal.connect(self.delete_start_slot)

        '''更新功能'''
        self.update_btn.clicked.connect(self.update_slot)
        self.updatewidget.update_close_signal.connect(lambda:self.setEnabled(True))
        self.updatewidget.update_name_signal.connect(self.update_name_slot)
        self.updatewidget.update_show_signal.connect(self.update_show_slot)

    def sql_init(self):
        '''
        sqllite3初始化
        '''
        try:
            conn = sqlite3.connect('find.db')
            cursor = conn.cursor()
            cursor.execute('select * from design')
            cursor.close()
            conn.close()
        except:
            conn = sqlite3.connect('find.db')
            cursor = conn.cursor()
            cursor.execute('create table design (id  integer PRIMARY KEY AUTOINCREMENT,name varchar(20),show varchar(100))')
            cursor.close()
            conn.close()


        '''查詢槽'''
    def find_slot(self,content):
        try:
            result = self.find_func(content)
            self.status_bar.showMessage('查詢成功')
            if result:
                self.show_view.append('<font size="5" color="red">共查詢 {} 條數(shù)據(jù)</font>'.format(len(result)))
                for i in range(len(result)):
                    self.show_view.append('id:' + str(result[i][0]))
                    self.show_view.append('名稱:' + result[i][1])
                    self.show_view.append('說明:' + result[i][2])
            else:
                self.show_view.append('<font size="5" color="red">共查詢 {} 條數(shù)據(jù)</font>'.format(len(result)))
        except Exception as e:
            self.status_bar.showMessage('查詢失敗')
            print(e)


        '''添加槽'''
    def add_slot(self):
        self.addwidget.show()
        self.setEnabled(False)

    def add_start_slot(self,name,show):
        try:
            self.insert_func(name,show)
            self.status_bar.showMessage('添加成功')
        except Exception as e:
            self.status_bar.showMessage('添加失敗')
        self.setEnabled(True)
        self.addwidget.name_text.clear()
        self.addwidget.show_text.clear()
        self.addwidget.close()


        '''刪除槽'''
    def delete_slot(self):
        self.deletewidget.show()
        self.setEnabled(False)

    def delete_start_slot(self,id):
        try:
            self.delete_func(id)
            self.reset_func()
            self.status_bar.showMessage('刪除成功')
        except  Exception as e:
            self.status_bar.showMessage('刪除失敗')
        self.setEnabled(True)
        self.deletewidget.close()


        '''更新槽'''
    def update_slot(self):
        self.updatewidget.show()
        self.setEnabled(False)

    def update_name_slot(self,id,name):
        try:
            self.update_name_func(id,name)
            self.status_bar.showMessage('更新名稱成功')
        except Exception as e:
            self.status_bar.showMessage('更新名稱失敗')
        self.setEnabled(True)
        self.updatewidget.close()

    def update_show_slot(self,id,name):
        try:
            self.update_show_func(id,name)
            self.status_bar.showMessage('更新名稱成功')
        except Exception as e:
            self.status_bar.showMessage('更新名稱失敗')
        self.setEnabled(True)
        self.updatewidget.close()


        '''數(shù)據(jù)庫函數(shù)'''
    def insert_func(self,name,show):
        '''
        插入信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('insert into design (id,name,show) values (null,"{}","{}")'.format(name,show))
        cursor.close()
        conn.commit()
        conn.close()

    def find_func(self,content):
        '''
        查詢信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM design WHERE name LIKE "%{}%"'.format(content))
        result1 = cursor.fetchall()
        cursor.close()
        conn.close()
        return result1

    def count_func(self):
        '''
        信息數(shù)目
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('select * from design')
        result = cursor.fetall()
        count = len(result)
        cursor.close()
        conn.close()
        return count

    def update_name_func(self,id,name):
        '''
        更新名稱信息
        '''
        print(id,name)
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('update design set name = ? where id = ?',(name,id))
        cursor.close()
        conn.commit()
        conn.close()

    def update_show_func(self,id,name):
        '''
        更新說明信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('update design set show = ? where id = ?',(name,id))
        cursor.close()
        conn.commit()
        conn.close()

    def delete_func(self,id):
        '''
        刪除信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('delete from design where id = ?',(id,))
        cursor.close()
        conn.commit()
        conn.close()

    def reset_func(self):
    	'''
		自增列歸零
		'''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute("DELETE FROM sqlite_sequence WHERE name = 'design'")
        cursor.close()
        conn.commit()
        conn.close()

這個(gè)類包括主界面,數(shù)據(jù)庫操作的函數(shù),與其他界面操作的函數(shù)
當(dāng)子界面打開時(shí),主界面不可使用
子界面向主界面發(fā)送信號(hào),功能實(shí)現(xiàn)代碼都寫在主界面類中
子界面需要在主界面聲明,例如:self.addwidget = AddWidget()

添加功能槽

        '''添加槽'''
    def add_slot(self):
        self.addwidget.show()
        self.setEnabled(False)

    def add_start_slot(self,name,show):
        try:
            self.insert_func(name,show)
            self.status_bar.showMessage('添加成功')
        except Exception as e:
            self.status_bar.showMessage('添加失敗')
        self.setEnabled(True)
        self.addwidget.name_text.clear()
        self.addwidget.show_text.clear()
        self.addwidget.close()
def add_slot(self):
        self.addwidget.show()
        self.setEnabled(False)

這個(gè)函數(shù)是用來啟動(dòng)添加界面和將主界面設(shè)置為不可用狀態(tài)

    def add_start_slot(self,name,show):
        try:
            self.insert_func(name,show)
            self.status_bar.showMessage('添加成功')
        except Exception as e:
            self.status_bar.showMessage('添加失敗')
        self.setEnabled(True)
        self.addwidget.name_text.clear()
        self.addwidget.show_text.clear()
        self.addwidget.close()

這個(gè)函數(shù)是添加功能的主要實(shí)現(xiàn),調(diào)用數(shù)據(jù)庫插入函數(shù),數(shù)據(jù)插入完畢后,清除添加子界面的文本,最后關(guān)閉添加子界面。其他功能槽大同小異

def reset_func()

def reset_func(self):
    	'''
		自增列歸零
		'''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute("DELETE FROM sqlite_sequence WHERE name = 'design'")
        cursor.close()
        conn.commit()
        conn.close()

這個(gè)函數(shù)作用不是很大
只是將sqlite3數(shù)據(jù)庫自帶的系統(tǒng)表,數(shù)據(jù)庫被創(chuàng)建時(shí),sqlite_sequence表會(huì)被自動(dòng)創(chuàng)建,該表包括兩列。第一列為name,用來存儲(chǔ)表的名稱。第二列為seq,用來保存表對(duì)應(yīng)的RowID的最大值,當(dāng)對(duì)應(yīng)的表增加記錄,該表會(huì)自動(dòng)更新。當(dāng)表刪除,該表對(duì)應(yīng)的記錄也會(huì)自動(dòng)刪除。
本來我是想當(dāng)有數(shù)據(jù)刪除時(shí),ID值能重新更新,可是這個(gè)方法,只有當(dāng)表內(nèi)數(shù)據(jù)全部刪除時(shí),ID才會(huì)重新開始

添加數(shù)據(jù)的界面

class AddWidget(QWidget):
    '''
    添加功能界面
    '''
    add_start_signal = pyqtSignal(str,str)
    add_close_signal = pyqtSignal()

    def __init__(self):
        super(AddWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('添加信息')
        self.setFixedSize(300,200)

        self.name_text = QLineEdit()
        self.show_text = QTextEdit()
        self.start_btn = QPushButton()
        self.start_btn.setText('添加')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.name_label = QLabel()
        self.name_label.setText('名稱:')
        self.show_label = QLabel()
        self.show_label.setText('說明:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.name_label)
        self.h1_layout.addWidget(self.name_text)
        self.h2_layout.addWidget(self.show_label)
        self.h2_layout.addWidget(self.show_text)
        self.h3_layout.addWidget(self.start_btn)
        self.h3_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addLayout(self.h3_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.start_btn.clicked.connect(self.start_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def start_slot(self):
        name = self.name_text.text()
        show = self.show_text.toPlainText()
        self.add_start_signal.emit(name,show)


    def close_slot(self):
        self.close()
        self.add_close_signal.emit()

    def closeEvent(self, event):
    	'''重寫關(guān)閉事件'''
        self.add_close_signal.emit()

這是添加數(shù)據(jù)的界面
自定義了兩個(gè)信號(hào)
1.添加數(shù)據(jù)的信號(hào),當(dāng)按下添加按鈕,這個(gè)界面向主界面?zhèn)鬏攦蓚€(gè)字符串
2.結(jié)束這個(gè)界面的信號(hào),不管是×了這個(gè)界面(重寫了關(guān)閉事件)還是按下取消按鈕,都向主界面發(fā)送信號(hào),用來使主界面可以使用

刪除數(shù)據(jù)的界面

class DeleteWidget(QWidget):
    '''
    刪除功能界面
    '''
    delete_cancel_signal = pyqtSignal()
    delete_start_signal = pyqtSignal(str)
    delete_close_signal = pyqtSignal()

    def __init__(self):
        super(DeleteWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('刪除信息')
        self.setFixedSize(300,100)

        self.id_text = QLineEdit()
        self.start_btn = QPushButton()
        self.start_btn.setText('刪除')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.id_label = QLabel()
        self.id_label.setText('要?jiǎng)h除的id:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.id_label)
        self.h1_layout.addWidget(self.id_text)
        self.h2_layout.addWidget(self.start_btn)
        self.h2_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.start_btn.clicked.connect(self.start_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def start_slot(self):
        id = self.id_text.text()
        self.delete_start_signal.emit(id)


    def close_slot(self):
        self.close()
        self.delete_close_signal.emit()

    def closeEvent(self, event):
        self.delete_close_signal.emit()

這是刪除數(shù)據(jù)的界面,跟之前界面布局基本一樣

修改數(shù)據(jù)的界面

class UpdateWidget(QWidget):
    '''
    更新功能界面
    '''
    update_name_signal = pyqtSignal(int,str)
    update_show_signal = pyqtSignal(int,str)
    update_close_signal = pyqtSignal()
    

    def __init__(self):
        super(UpdateWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('修改信息')
        self.setFixedSize(300,150)

        self.content_text = QLineEdit()
        self.id_text = QLineEdit()
        self.name_btn = QPushButton()
        self.name_btn.setText('修改名稱')
        self.show_btn = QPushButton()
        self.show_btn.setText('修改說明')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.content_label = QLabel()
        self.content_label.setText('修改內(nèi)容:')
        self.id_label = QLabel()
        self.id_label.setText('選擇id為:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.id_label)
        self.h1_layout.addWidget(self.id_text)
        self.h2_layout.addWidget(self.content_label)
        self.h2_layout.addWidget(self.content_text)
        self.h3_layout.addWidget(self.name_btn)
        self.h3_layout.addWidget(self.show_btn)
        self.h3_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addLayout(self.h3_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.name_btn.clicked.connect(self.update_name_slot)
        self.show_btn.clicked.connect(self.update_show_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def update_name_slot(self):
        id = self.id_text.text()
        id = int(id)
        content = self.content_text.text()
        self.update_name_signal.emit(id,content)


    def update_show_slot(self):
        id = self.id_text.text()
        id = int(id)
        content = self.content_text.text()
        self.update_show_signal.emit(id,content)  

    def close_slot(self):
        self.close()
        self.update_close_signal.emit()

    def closeEvent(self, event):
        self.update_close_signal.emit()

這個(gè)更新數(shù)據(jù)的界面,跟之前的界面的布局基本一樣

全部代碼

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QTextEdit, QHBoxLayout, QVBoxLayout, QLineEdit, QLabel,QTextBrowser 
import sqlite3



class MainWidget(QMainWindow):
    def __init__(self):
        super(MainWidget,self).__init__()
        self.ui_init()
        self.connect_init()
        self.sql_init()

    def ui_init(self):
        self.setWindowTitle('信息查詢')
        self.resize(600,700)

        self.addwidget = AddWidget()
        self.deletewidget = DeleteWidget()
        self.updatewidget = UpdateWidget()

        self.show_view = QTextBrowser()
        self.find_text = QLineEdit()
        
        self.find_btn = QPushButton()
        self.find_btn.setText('查詢')
        self.update_btn = QPushButton()
        self.update_btn.setText('更改')
        self.delete_btn = QPushButton()
        self.delete_btn.setText('刪除')
        self.add_btn = QPushButton()
        self.add_btn.setText('添加')

        self.status_bar = self.statusBar()
        self.widget = QWidget()

        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.find_text)
        self.h1_layout.addWidget(self.find_btn)
        self.h2_layout.addWidget(self.update_btn)
        self.h2_layout.addWidget(self.delete_btn)
        self.h2_layout.addWidget(self.add_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addWidget(self.show_view)

        self.widget.setLayout(self.v_layout)
        self.setCentralWidget(self.widget)


    def connect_init(self):
        '''
        信號(hào)與槽
        '''
        '''查詢功能'''
        self.find_btn.clicked.connect(lambda:self.find_slot(self.find_text.text()))

        '''添加功能'''
        self.add_btn.clicked.connect(self.add_slot)
        self.addwidget.add_close_signal.connect(lambda:self.setEnabled(True))
        self.addwidget.add_start_signal.connect(self.add_start_slot)
        
        '''刪除功能'''
        self.delete_btn.clicked.connect(self.delete_slot)
        self.deletewidget.delete_close_signal.connect(lambda:self.setEnabled(True))
        self.deletewidget.delete_start_signal.connect(self.delete_start_slot)

        '''更新功能'''
        self.update_btn.clicked.connect(self.update_slot)
        self.updatewidget.update_close_signal.connect(lambda:self.setEnabled(True))
        self.updatewidget.update_name_signal.connect(self.update_name_slot)
        self.updatewidget.update_show_signal.connect(self.update_show_slot)

    def sql_init(self):
        '''
        sqllite3初始化
        '''
        try:
            conn = sqlite3.connect('find.db')
            cursor = conn.cursor()
            cursor.execute('select * from design')
            cursor.close()
            conn.close()
        except:
            conn = sqlite3.connect('find.db')
            cursor = conn.cursor()
            cursor.execute('create table design (id  integer PRIMARY KEY AUTOINCREMENT,name varchar(20),show varchar(100))')
            cursor.close()
            conn.close()


        '''查詢槽'''
    def find_slot(self,content):
        try:
            result = self.find_func(content)
            self.status_bar.showMessage('查詢成功')
            if result:
                self.show_view.append('<font size="5" color="red">共查詢 {} 條數(shù)據(jù)</font>'.format(len(result)))
                for i in range(len(result)):
                    self.show_view.append('id:' + str(result[i][0]))
                    self.show_view.append('名稱:' + result[i][1])
                    self.show_view.append('說明:' + result[i][2])
            else:
                self.show_view.append('<font size="5" color="red">共查詢 {} 條數(shù)據(jù)</font>'.format(len(result)))
        except Exception as e:
            self.status_bar.showMessage('查詢失敗')
            print(e)


        '''添加槽'''
    def add_slot(self):
        self.addwidget.show()
        self.setEnabled(False)

    def add_start_slot(self,name,show):
        try:
            self.insert_func(name,show)
            self.status_bar.showMessage('添加成功')
        except Exception as e:
            self.status_bar.showMessage('添加失敗')
        self.setEnabled(True)
        self.addwidget.name_text.clear()
        self.addwidget.show_text.clear()
        self.addwidget.close()


        '''刪除槽'''
    def delete_slot(self):
        self.deletewidget.show()
        self.setEnabled(False)

    def delete_start_slot(self,id):
        try:
            self.delete_func(id)
            self.reset_func()
            self.status_bar.showMessage('刪除成功')
        except  Exception as e:
            self.status_bar.showMessage('刪除失敗')
        self.setEnabled(True)
        self.deletewidget.close()


        '''更新槽'''
    def update_slot(self):
        self.updatewidget.show()
        self.setEnabled(False)

    def update_name_slot(self,id,name):
        try:
            self.update_name_func(id,name)
            self.status_bar.showMessage('更新名稱成功')
        except Exception as e:
            self.status_bar.showMessage('更新名稱失敗')
        self.setEnabled(True)
        self.updatewidget.close()

    def update_show_slot(self,id,name):
        try:
            self.update_show_func(id,name)
            self.status_bar.showMessage('更新名稱成功')
        except Exception as e:
            self.status_bar.showMessage('更新名稱失敗')
        self.setEnabled(True)
        self.updatewidget.close()


        '''數(shù)據(jù)庫函數(shù)'''
    def insert_func(self,name,show):
        '''
        插入信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('insert into design (id,name,show) values (null,"{}","{}")'.format(name,show))
        cursor.close()
        conn.commit()
        conn.close()

    def find_func(self,content):
        '''
        查詢信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM design WHERE name LIKE "%{}%"'.format(content))
        result1 = cursor.fetchall()
        cursor.close()
        conn.close()
        return result1

    def count_func(self):
        '''
        信息數(shù)目
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('select * from design')
        result = cursor.fetchall()
        count = len(result)
        cursor.close()
        conn.close()
        return count

    def update_name_func(self,id,name):
        '''
        更新名稱信息
        '''
        print(id,name)
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('update design set name = ? where id = ?',(name,id))
        cursor.close()
        conn.commit()
        conn.close()

    def update_show_func(self,id,name):
        '''
        更新說明信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('update design set show = ? where id = ?',(name,id))
        cursor.close()
        conn.commit()
        conn.close()

    def delete_func(self,id):
        '''
        刪除信息
        '''
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute('delete from design where id = ?',(id,))
        cursor.close()
        conn.commit()
        conn.close()

    def reset_func(self):
        conn = sqlite3.connect('find.db')
        cursor = conn.cursor()
        cursor.execute("DELETE FROM sqlite_sequence WHERE name = 'design'")
        cursor.close()
        conn.commit()
        conn.close()



class AddWidget(QWidget):
    '''
    添加功能界面
    '''
    add_start_signal = pyqtSignal(str,str)
    add_close_signal = pyqtSignal()

    def __init__(self):
        super(AddWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('添加信息')
        self.setFixedSize(300,200)

        self.name_text = QLineEdit()
        self.show_text = QTextEdit()
        self.start_btn = QPushButton()
        self.start_btn.setText('添加')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.name_label = QLabel()
        self.name_label.setText('名稱:')
        self.show_label = QLabel()
        self.show_label.setText('說明:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.name_label)
        self.h1_layout.addWidget(self.name_text)
        self.h2_layout.addWidget(self.show_label)
        self.h2_layout.addWidget(self.show_text)
        self.h3_layout.addWidget(self.start_btn)
        self.h3_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addLayout(self.h3_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.start_btn.clicked.connect(self.start_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def start_slot(self):
        name = self.name_text.text()
        show = self.show_text.toPlainText()
        self.add_start_signal.emit(name,show)


    def close_slot(self):
        self.close()
        self.add_close_signal.emit()

    def closeEvent(self, event):
        self.add_close_signal.emit()

        
        
class DeleteWidget(QWidget):
    '''
    刪除功能界面
    '''
    delete_cancel_signal = pyqtSignal()
    delete_start_signal = pyqtSignal(str)
    delete_close_signal = pyqtSignal()

    def __init__(self):
        super(DeleteWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('刪除信息')
        self.setFixedSize(300,100)

        self.id_text = QLineEdit()
        self.start_btn = QPushButton()
        self.start_btn.setText('刪除')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.id_label = QLabel()
        self.id_label.setText('要?jiǎng)h除的id:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.id_label)
        self.h1_layout.addWidget(self.id_text)
        self.h2_layout.addWidget(self.start_btn)
        self.h2_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.start_btn.clicked.connect(self.start_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def start_slot(self):
        id = self.id_text.text()
        self.delete_start_signal.emit(id)


    def close_slot(self):
        self.close()
        self.delete_close_signal.emit()

    def closeEvent(self, event):
        self.delete_close_signal.emit()


class UpdateWidget(QWidget):
    '''
    更新功能界面
    '''
    update_name_signal = pyqtSignal(int,str)
    update_show_signal = pyqtSignal(int,str)
    update_close_signal = pyqtSignal()
    

    def __init__(self):
        super(UpdateWidget,self).__init__()
        self.ui_init()
        self.connect_init()

    def ui_init(self):
        self.setWindowTitle('修改信息')
        self.setFixedSize(300,150)

        self.content_text = QLineEdit()
        self.id_text = QLineEdit()
        self.name_btn = QPushButton()
        self.name_btn.setText('修改名稱')
        self.show_btn = QPushButton()
        self.show_btn.setText('修改說明')
        self.cancel_btn = QPushButton()
        self.cancel_btn.setText('取消')
        self.content_label = QLabel()
        self.content_label.setText('修改內(nèi)容:')
        self.id_label = QLabel()
        self.id_label.setText('選擇id為:')
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h1_layout.addWidget(self.id_label)
        self.h1_layout.addWidget(self.id_text)
        self.h2_layout.addWidget(self.content_label)
        self.h2_layout.addWidget(self.content_text)
        self.h3_layout.addWidget(self.name_btn)
        self.h3_layout.addWidget(self.show_btn)
        self.h3_layout.addWidget(self.cancel_btn)
        self.v_layout.addLayout(self.h1_layout)
        self.v_layout.addLayout(self.h2_layout)
        self.v_layout.addLayout(self.h3_layout)
        self.setLayout(self.v_layout)

    def connect_init(self):
        self.name_btn.clicked.connect(self.update_name_slot)
        self.show_btn.clicked.connect(self.update_show_slot)
        self.cancel_btn.clicked.connect(self.close_slot)

    def update_name_slot(self):
        id = self.id_text.text()
        id = int(id)
        content = self.content_text.text()
        self.update_name_signal.emit(id,content)


    def update_show_slot(self):
        id = self.id_text.text()
        id = int(id)
        content = self.content_text.text()
        self.update_show_signal.emit(id,content)  

    def close_slot(self):
        self.close()
        self.update_close_signal.emit()

    def closeEvent(self, event):
        self.update_close_signal.emit()       

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dispaly = MainWidget()
    dispaly.show()
    sys.exit(app.exec_())

展示

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于Python PyQt5實(shí)戰(zhàn)項(xiàng)目之查詢器的實(shí)現(xiàn)流程詳解的文章就介紹到這了,更多相關(guān)Python PyQt5 查詢器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python統(tǒng)計(jì)字符的個(gè)數(shù)代碼實(shí)例

    python統(tǒng)計(jì)字符的個(gè)數(shù)代碼實(shí)例

    在本篇文章里小編給大家整理了關(guān)于python統(tǒng)計(jì)字符的個(gè)數(shù)代碼實(shí)例內(nèi)容,需要的朋友們可以參考下。
    2020-02-02
  • python datetime 和時(shí)間戳互相轉(zhuǎn)換問題

    python datetime 和時(shí)間戳互相轉(zhuǎn)換問題

    time和datetime都是Python中的內(nèi)置模塊(不需要安裝,直接可以使用),都可以對(duì)時(shí)間進(jìn)行獲取,對(duì)時(shí)間格式進(jìn)行轉(zhuǎn)換,如時(shí)間戳和時(shí)間字符串的相互轉(zhuǎn)換,本文先給大家介紹python datetime 和時(shí)間戳互轉(zhuǎn)問題,感興趣的朋友一起看看吧
    2022-11-11
  • Python 利用base64庫 解碼本地txt文本字符串

    Python 利用base64庫 解碼本地txt文本字符串

    這篇文章主要介紹了Python 利用base64庫 解碼本地txt文本字符串的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • pymongo為mongodb數(shù)據(jù)庫添加索引的方法

    pymongo為mongodb數(shù)據(jù)庫添加索引的方法

    這篇文章主要介紹了pymongo為mongodb數(shù)據(jù)庫添加索引的方法,涉及Python操作mongodb數(shù)據(jù)庫的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • python函數(shù)常見關(guān)鍵字分享

    python函數(shù)常見關(guān)鍵字分享

    這篇文章主要向大家介紹的是python函數(shù)常見關(guān)鍵字,文章基于python的相關(guān)資料展開對(duì)文章主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解

    pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解

    這篇文章主要為大家介紹了pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Python基礎(chǔ)之Spyder的使用

    Python基礎(chǔ)之Spyder的使用

    Spyder是一個(gè)用于科學(xué)計(jì)算的使用Python編程語言的集成開發(fā)環(huán)境(IDE),它結(jié)合了綜合開發(fā)工具的高級(jí)編輯、分析、調(diào)試等功能,需要的朋友可以參考下
    2023-05-05
  • 用Python編寫個(gè)解釋器實(shí)現(xiàn)方法接受

    用Python編寫個(gè)解釋器實(shí)現(xiàn)方法接受

    計(jì)算機(jī)只能理解機(jī)器碼。歸根結(jié)底,編程語言只是一串文字,目的是為了讓人類更容易編寫他們想讓計(jì)算機(jī)做的事情。真正的魔法是由編譯器和解釋器完成,它們彌合了兩者之間的差距。解釋器逐行讀取代碼并將其轉(zhuǎn)換為機(jī)器碼
    2023-01-01
  • Python分支語句常見的使用方法

    Python分支語句常見的使用方法

    這篇文章主要介紹了Python分支語句常見的使用方法,Python分支語句,也稱為選擇語句,體現(xiàn)了程序的選擇結(jié)構(gòu),即對(duì)應(yīng)不同的場景,選擇不同的處理方式,具體常見的用法需要的朋友可參考下面文章內(nèi)容
    2022-06-06
  • python自動(dòng)化測試之異常及日志操作實(shí)例分析

    python自動(dòng)化測試之異常及日志操作實(shí)例分析

    這篇文章主要介紹了python自動(dòng)化測試之異常及日志操作,結(jié)合實(shí)例形式分析了python自動(dòng)化測試中的異常捕獲與日志記錄相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11

最新評(píng)論