Pycharm+OpenGuass 数据库大作业开发笔记(二)

一. 连接 Opengauss 数据库并设置弹窗

1.新建python文件“OpenGauss_GUI.py”,然后复制如下代码:

from PySide2.QtWidgets import QApplication,QMessageBox,QTableWidgetItem
from PySide2.QtUiTools import QUiLoader
import psycopg2
import sys
# 导入相关库
# 定义一个类专门处理GUI
class Stats:

    def __init__(self):
        # 从文件中加载UI定义
        # 从 UI 定义中动态 创建一个相应的窗口对象

        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('G:\\CODE\\2019213061\\main.ui')
        self.ui.setWindowTitle('你的学号')#设置窗口名称

# 定义一个连接OpenGauss的函数
def create_conn():
    database='school'
    user='dboper'
    password='dboper@123'
    host='192.168.174.134'
    port='26000'
    conn = psycopg2.connect(database=database, user=user, password=password, host=host, port=port) #连接数据库
    return conn


#程序从这里执行
app = QApplication([])
stats = Stats()
stats.ui.show() # 界面显示


sys.exit(app.exec_())#事件处理循环  要不然程序一闪而过  死循环

右键点击“运行”后我们可以看到一个空的窗口,代表程序正常可以正常工作。QUiLoader().load()这里读取了我们之前创建的main.ui文件(建议写绝对路径),并生成了一个窗口对象返回到类变量ui中,接下来我们对窗口进行操作都需要用到类变量ui。

 

2. QMessageBox控件

    QMessageBox控件可以用于生产弹窗,接下来我们来实现数据库的连接,在连接成功后给我们弹出一个提示窗口,失败的话将报错信息用弹窗进行显示stats = Stats()这段代码下加入下述代码:

msgBox = QMessageBox()
try:
    conn = create_conn()
except Exception as e:
    msgBox.about(stats.ui, '提示窗口', str(e))

else:
    msgBox.about(stats.ui, '提示窗口', '数据库连接成功  ')#弹窗提示

在初始化弹窗对象msgBox,try语句下会先执行conn = create_conn(),如果出现异常则会获得报错信息e。没有异常则执行else:中的语句。

其中About()函数是QMessageBox()的类函数,用于弹出窗口,其中第一个参数需要填一个主窗口对象,也就是类变量ui,第二个参数是弹窗的标题,第三个参数则是弹窗的内容。

右键运行后可以观察到弹窗的出现(如果IP有误最终会因为超时报错)

这个时候不管是否连接成功,按下OK后会都会显示我们自己designer生成的主窗口中,因此我们根据try语句的性质将显示界面的那行代码放入else里,如下图所示

这样只有连接成功时才能进入主窗口中

二. 设计main.ui

选择“工具”→“工具”→“QtDesigner”启动designer,开启后我们先将左上角的菜单栏删掉,我们可以发现控件里面的对应菜单的menubar已经消失了

下图为designer设计界面的基本介绍:

在坐标工具栏中选择Label控件,将其拖到主窗口中进行编辑。双击刚刚拖出来的Label控件即可对其显示内容进行编辑,将其修改为“Opengauss 开发案例”并将其拖到可以显示全部文字的大小

 

这时如果要修改大小,可以右键点击“改变多信息文本”可以修改文本大小并进行格式编辑

 

如果要修改字体,则右键点击更改样式,点击添加字体即可。(几乎所有的控件都能进行这样的操作)更改后如右图所示

  

二. PushButton控件

1.在左边工具栏找到PushButton控件,将其拖入主窗口中,双击修改Button的内容为“关闭”,结果如下图所示:

可以根据自己的想法,更改PushButton内的文本字体与大小,已经PushButton本身的大小

2.在对象查看器找到PushButton,双击可以进行编辑,这里我们将其更改为“c_button”,代表该按钮的作用是关闭窗口,

接下来在Pycharm中我们就可以通过self.ui主窗口对象来调用它的成员变量(c_button对象)来实现关闭窗口的操作。

3.保存main.ui,返回到Pycharm中, 在

class Stats的构造函数def __init__(self):加入下述语句

self.ui.c_button.clicked.connect(self.close_main_window)#按钮按下 执行函数self.close_main_window
#加入类函数
def close_main_window(self):#关闭窗口
    self.ui.close()

如下图所示:

关于添加的内容:

    (1)self.ui.c_button.clicked.connect(self.close_main_window) 这段可以理解为调用了ui中的c_button对象启用了一个监听函数,其参数是一个函数名,这里我们填入的参数正是下面我们定义的关闭主窗口的类函数。

    (2)close()为窗口类的类函数,调用后关闭该窗口,这里ui.close()就是只关闭窗口ui,如果还有其他窗口则不会受到影响

    右键运行,可以看到我们刚才添加的label以及关闭按钮,按下“关闭后窗口消失”,程序运行结束

三. 添加表格控件

1.返回designer在工具栏搜索table,选择Table Widget控件

将其调整为合适的大小,右键选择“编辑项目”,即可添加行和列

(右键选择“改变样式”也可修改单元内文本的字体和大小),结果如下:

    2.修改表格对象名,在对象查看器中找到“tableWidget”双击将其修改为“table1”,便于我我们待会再程序内对表格进行操作

三. 数据库中表格数据的加载

       保存main.ui,返回Pycharm,在class Stats下补充类函数:

def add_cell(self,row,column,txt): #修改单个单元格的内容
    item = QTableWidgetItem()
    item.setText(txt)
    self.ui.table1.setItem(row,column,item)

def init_table(self,tab_list):
    self.row=int(len(tab_list))#获得行数
    self.ui.table1.setRowCount(self.row) #初始化行数
    for i in range(self.row):
        temp = list(tab_list[i])
        for j in range(5): #循环写入5个属性
            self.add_cell(i,j,str(temp[j]))

结果如图所示:

这里类函数init_table需要输入含有每一行数据的列表作为参数,然后通过循环写入整个表的数据,因此我们需要先用SQL语句获取Student表的数据,找到下图else:所在的位置

在msgBox.about(stats.ui, '提示窗口', '数据库连接成功  ')后加入下述语句

######     获得student表的全部内容       ######

cur = conn.cursor() #创建光标

cur.execute("select * from student;") #执行SQL指令

results = cur.fetchall()#获取所有结果

conn.commit()

######       将数据写入UI               ######

stats.init_table(results)

结果如下:

这里的conn和cur相当于全局变量,可以在类函数里面直接调用(后面会用到)

同时,创建了conn与cur,我们需要在程序结束时释放掉资源,所以我们要在关闭主窗口的类函数下加入这两句,cur.close()和conn.close()。如下图所示:

右键运行,可以看到,数据库student表中的所有数据均已显示在主窗口的表格中:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值