Python PyQt5實戰(zhàn)項目之查詢器的實現(xiàn)流程詳解
簡介
這是一個操作數(shù)據(jù)庫(sqlite3)的項目,用PyQt5進行界面封裝。
此次項目最主要的是,主界面與子界面的交互,一個主界面與三個子界面交互
可以添加數(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): ''' 信號與槽 ''' '''查詢功能''' 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()
這個類包括主界面,數(shù)據(jù)庫操作的函數(shù),與其他界面操作的函數(shù)
當(dāng)子界面打開時,主界面不可使用
子界面向主界面發(fā)送信號,功能實現(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)
這個函數(shù)是用來啟動添加界面和將主界面設(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()
這個函數(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()
這個函數(shù)作用不是很大
只是將sqlite3數(shù)據(jù)庫自帶的系統(tǒng)表,數(shù)據(jù)庫被創(chuàng)建時,sqlite_sequence
表會被自動創(chuàng)建,該表包括兩列。第一列為name,用來存儲表的名稱。第二列為seq,用來保存表對應(yīng)的RowID的最大值,當(dāng)對應(yīng)的表增加記錄,該表會自動更新。當(dāng)表刪除,該表對應(yīng)的記錄也會自動刪除。
本來我是想當(dāng)有數(shù)據(jù)刪除時,ID值能重新更新,可是這個方法,只有當(dāng)表內(nèi)數(shù)據(jù)全部刪除時,ID才會重新開始
添加數(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ù)的界面
自定義了兩個信號
1.添加數(shù)據(jù)的信號,當(dāng)按下添加按鈕,這個界面向主界面?zhèn)鬏攦蓚€字符串
2.結(jié)束這個界面的信號,不管是×了這個界面(重寫了關(guān)閉事件)還是按下取消按鈕,都向主界面發(fā)送信號,用來使主界面可以使用
刪除數(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('要刪除的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()
這個更新數(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): ''' 信號與槽 ''' '''查詢功能''' 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('要刪除的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實戰(zhàn)項目之查詢器的實現(xiàn)流程詳解的文章就介紹到這了,更多相關(guān)Python PyQt5 查詢器內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。