Python PyQt5实战项目之查询器的实现流程详解
作者:不侠居 发布时间:2023-07-15 04:19:21
简介
这是一个操作数据库(sqlite3)的项目,用PyQt5进行界面封装。
此次项目最主要的是,主界面与子界面的交互,一个主界面与三个子界面交互
可以添加数据,修改数据,删除数据
主界面
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">共查询 {} 条数据</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">共查询 {} 条数据</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()
'''数据库函数'''
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):
'''
信息数目
'''
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()
这个类包括主界面,数据库操作的函数,与其他界面操作的函数
当子界面打开时,主界面不可使用
子界面向主界面发送信号,功能实现代码都写在主界面类中
子界面需要在主界面声明,例如: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)
这个函数是用来启动添加界面和将主界面设置为不可用状态
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 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()
这个函数作用不是很大
只是将sqlite3数据库自带的系统表,数据库被创建时,sqlite_sequence
表会被自动创建,该表包括两列。第一列为name,用来存储表的名称。第二列为seq,用来保存表对应的RowID的最大值,当对应的表增加记录,该表会自动更新。当表删除,该表对应的记录也会自动删除。
本来我是想当有数据删除时,ID值能重新更新,可是这个方法,只有当表内数据全部删除时,ID才会重新开始
添加数据的界面
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()
这是添加数据的界面
自定义了两个信号
1.添加数据的信号,当按下添加按钮,这个界面向主界面传输两个字符串
2.结束这个界面的信号,不管是×了这个界面(重写了关闭事件)还是按下取消按钮,都向主界面发送信号,用来使主界面可以使用
删除数据的界面
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('修改内容:')
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()
这个更新数据的界面,跟之前的界面的布局基本一样
全部代码
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">共查询 {} 条数据</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">共查询 {} 条数据</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()
'''数据库函数'''
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):
'''
信息数目
'''
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('修改内容:')
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_())
展示
来源:https://blog.csdn.net/m0_46778548/article/details/115431012
猜你喜欢
- 最近用layer ui上传文件遇到了一个问题,我想在上传文件之前把data-id传入后台,layer文档找了一下也没有找到类似的说明,经过一
- 用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的。代码:
- CSV文件简单来说CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗
- django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 djan
- 1.int,float相互转换例1:int转float使用float(int)float转int使用int(float)# coding:u
- 本文实例讲述了PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作。分享给大家供大家参考,具体如下:在PHP中,会遇到这样的情况,子类
- SELECT语句具有种类繁多的各类选项,这些选项可以用来控制数据返回的方式。这些选项以子句、关键词和函数的形式存在。 子句是一种修改结果的语
- 本文实例讲述了Python向Excel中插入图片的简单实现方法。分享给大家供大家参考,具体如下:使用Python向Excel文件中插入图片,
- 一般一个网站的首页访问量是最大的,如果您的网站的首页打开的非常缓慢,您的客户将会陆续离开你的网站.通常我们把需要经过复杂运算或者查询数据库得
- 如何在聊天室实现趣味答题并计分功能?这个创意确实很好,我们可用在聊天室框架中加入一隐含帧(5分钟刷新一次)的做法来实现这一功能。questi
- 前言最近微信小游戏跳一跳大热,自己也是中毒颇久,无奈手残最高分只拿到200分。无意间看到教你用Python来玩微信跳一跳一文,在电脑上利用a
- 三目运算符也就是三元运算符一些语言(如Java)的三元表达式形如:判定条件?为真时的结果:为假时的结果result=x if xPython
- 摘要:本文介绍了有关数据表的优化技巧,主要内容有,选择表的类型,打开尽量少的表,锁定表与查询速度的关系以及如何优化表以达到提高查询速度的目的
- Macromedia Dreamweaver MX 2004提供了更多功能强劲的可视化设计工具、应用开
- 前言最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyin
- 很简单的教程,献给喜欢SEO的朋友们。把article.asp?logID=26 替换成article.asp?/a
- post接收字符串def subscription(request): msg = request.POST.get('
- MySQL数据库配置技巧用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQ
- 概述Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Pyth
- 本文实例总结了PHP session会话操作技巧。分享给大家供大家参考,具体如下:会话技术session将会话数据存储与服务器端,同时使会话