qt是一个跨平台的语言,一次运行,到处运行。qt是用C++写的,为了能适应python语言,出了pyqt.
注意:如果配置了pycharm的external tool,右击项目不显示,可以打开external tool点击apply,然后重启pycharm试试。
https://www.bilibili.com/video/BV1e64y1T7PD?p=2
最终效果如下图
先设置选项卡
设置选项卡大小
再设置选项卡中的每个标签页
将该标签添加到选项卡中
例子如下:
self.bottom_left_tabwidget=QTabWidget() self.bottom_left_tabwidget.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Ignored)
#标签一
tab1=QWidget()
tablewidget=QTableWidget(10,10)
tab1hbox=QHBoxLayout()
tab1hbox.addWidget(tablewidget)
tab1.setLayout(tab1hbox)
self.bottom_left_tabwidget.addTab(tab1,'表格')
先想好一个主布局,例如利用网格布局
然后想好每个小布局
对于小布局
调用小布局的函数
设置小布局在主布局中的位置
将主布局添加到当前的self中
注:self目前理解是整个窗口界面
要先打包出exe文件,再将exe文件制作成安装包
打包
制作安装包
答:可以通过信息和槽函数来实现,主要四步
在主页面定义信号
在子页面定义槽函数
连接信号和槽函数
主页面发送信号
这样主页面的信号就可以传到子页面,主页面发送信号后,会自动调用子页面的槽函数,并将值传给子页面
#主页面
ui, _ = loadUiType('main.ui')
class MainApp(QMainWindow, ui):
# 定义构造方法
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
sendid = pyqtSignal(str)#1.信号,并指定传递字符串类型参数##########
# 更新实验信息
def updateTable(self, id):
self.update_app = update.updateAPP()
self.sendid.connect(self.update_app.get)#3.子页面的get函数#########
self.sendid.emit(id)#4.主页面发送信号给子页面#######
self.update_app.show()
#子页面
update, _ = loadUiType('update.ui')
class updateAPP(QWidget, update):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
#2.面的槽函数############
def get(self, exp_id):
print('信号:', id)
self.save_exp_id = exp_id
self.showExperimentInfo(exp_id)
原因:finally中重复关闭数据库,出现错误,导致退出程序
原因:self.model_input_steps.setText(model_data[5])
self.model_output_steps.setText(model_data[6])中model_data[5],model_data[6]中的值都是int类型的(因为数据库中被设置成了int),但是model_input_steps和model_output_steps中的内容是char字符类型,因此类型不符合,出现错误。
解决:把数据库中input_steps,output_steps两个属性改成varchar类型.
# 显示实验信息
def showModelInfo(self, model_id):
conn = get_conn()
cur = conn.cursor()
sql = "select model_name,model_type,model_introduce,model_input,model_output,input_steps,output_steps from model where model_id=%s"
cur.execute(sql, model_id)
model_data = cur.fetchone()
print(model_data)
self.model_name.setText(model_data[0])
self.model_type.setText(model_data[1])
self.model_desc.setPlainText(model_data[2])
self.model_input.setText(model_data[3])
self.model_output.setText(model_data[4])
self.model_input_steps.setText(model_data[5])
self.model_output_steps.setText(model_data[6])
close_conn(conn, cur)