Python PyQt5實(shí)戰(zhàn)項(xiàng)目之查詢器的實(shí)現(xià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í)例
在本篇文章里小編給大家整理了關(guān)于python統(tǒng)計(jì)字符的個(gè)數(shù)代碼實(shí)例內(nèi)容,需要的朋友們可以參考下。2020-02-02python 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-11pymongo為mongodb數(shù)據(jù)庫添加索引的方法
這篇文章主要介紹了pymongo為mongodb數(shù)據(jù)庫添加索引的方法,涉及Python操作mongodb數(shù)據(jù)庫的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解
這篇文章主要為大家介紹了pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10用Python編寫個(gè)解釋器實(shí)現(xiàn)方法接受
計(jì)算機(jī)只能理解機(jī)器碼。歸根結(jié)底,編程語言只是一串文字,目的是為了讓人類更容易編寫他們想讓計(jì)算機(jī)做的事情。真正的魔法是由編譯器和解釋器完成,它們彌合了兩者之間的差距。解釋器逐行讀取代碼并將其轉(zhuǎn)換為機(jī)器碼2023-01-01python自動(dòng)化測試之異常及日志操作實(shí)例分析
這篇文章主要介紹了python自動(dòng)化測試之異常及日志操作,結(jié)合實(shí)例形式分析了python自動(dòng)化測試中的異常捕獲與日志記錄相關(guān)操作技巧,需要的朋友可以參考下2019-11-11