wxpython设计GUI:grid控件实现显示表单数据功能,同时实现界面的上下翻页以及跳转功能

news/2024/5/14 6:48:18/文章来源:https://blog.csdn.net/Logintern09/article/details/126807317

grid控件实现显示表单数据功能,同时实现界面的上下翻页以及跳转功能。

1. 效果展示

在这里插入图片描述

2. 代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Logintern09###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################import wx
import wx.xrc
import wx.grid
import wx.adv
import os
import sys
from openpyxl import load_workbook# 由于字典的keys是无序排列的,需要增加bill_view_list列表,帮助确认key在keys中的索引
bill_view_list = ["单号", "需求描述", "需求来源", "创建人",  "流程状态","问题来源", "项目状态", "严重等级", "创建日期"]# 此列表应用于单号总表.xlsx的列标题排序
excel_bill_list = ["单号", "需求描述", "需求来源", "创建人", "问题来源","项目状态", "严重等级", "流程状态", "创建日期"]view_bill_nums = 10class excel():def __init__(self, file, sheet_idx):self.file = fileself.wb = load_workbook(self.file)sheets = self.wb.get_sheet_names()self.sheet = sheets[sheet_idx]self.ws = self.wb[self.sheet]def getSheetNames(self):sheets = self.wb.get_sheet_names()return sheets# 删除sheetdef del_sheet(self, sheet_name):sheets = self.wb.get_sheet_names()if sheet_name in sheets:sheet = self.wb[sheet_name]self.wb.remove(sheet)self.wb.save(self.file)else:raise NameError("%s不存在该sheet页签:%s" % (self.file, sheet_name))# 删除指定的行def delete_row(self, row_idx):# 删除行(列)后,下(后)面的表格将自动上(前)移。self.ws.delete_rows(row_idx)self.wb.save(self.file)# 获取表格的总行数和总列数def getRowsClosNum(self):rows = self.ws.max_rowcolumns = self.ws.max_columnreturn rows, columns# 获取某个单元格的值def getCellValue(self, row, column):cellvalue = self.ws.cell(row=row, column=column).valuereturn cellvalue# 获取某列的所有值def getColValues(self, column):rows = self.ws.max_rowcolumndata = []for i in range(1, rows + 1):cellvalue = self.ws.cell(row=i, column=column).valuecolumndata.append(cellvalue)return columndata# 获取某行所有值def getRowValues(self, row):columns = self.ws.max_columnrowdata = []for i in range(1, columns + 1):cellvalue = self.ws.cell(row=row, column=i).valuerowdata.append(cellvalue)return rowdata# 设置某个单元格的值def setCellValue(self, row, colunm, cellvalue):try:self.ws.cell(row=row, column=colunm).value = cellvalueself.wb.save(self.file)except:self.ws.cell(row=row, column=colunm).value = "writefail"self.wb.save(self.file)###########################################################################
## Class Menu_Frame
###########################################################################class Menu_Frame(wx.Frame):def __init__(self, parent, id=-1, UpdateUI=None):wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"", pos=wx.DefaultPosition,size=wx.Size(1300, 700), style=wx.DEFAULT_FRAME_STYLE)self.UpdateUI = UpdateUI# self.ShowFullScreen(True, wx.DEFAULT_FRAME_STYLE^(wx.CLOSE_BOX))  # 初始化窗口就默认全屏显示self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)self.SetBackgroundColour(wx.Colour("TURQUOISE"))bSizer20 = wx.BoxSizer(wx.VERTICAL)bSizer22 = wx.BoxSizer(wx.VERTICAL)self.m_staticText5 = wx.StaticText(self, wx.ID_ANY, u"", wx.DefaultPosition, wx.DefaultSize, 0)self.m_staticText5.Wrap(-1)self.m_staticText5.SetFont(wx.Font(24, 75, 90, 90, False, "黑体"))bSizer22.Add(self.m_staticText5, 0, wx.ALIGN_CENTER | wx.ALL, 20)bSizer20.Add(bSizer22, 0, wx.EXPAND, 5)self.m_notebook6 = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)self.m_panel23 = wx.Panel(self.m_notebook6, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)sbSizer1 = wx.StaticBoxSizer(wx.StaticBox(self.m_panel23, wx.ID_ANY, u""), wx.VERTICAL)bSizer51 = wx.BoxSizer(wx.HORIZONTAL)self.m_button25 = wx.Button(sbSizer1.GetStaticBox(), wx.ID_ANY, u"刷新", wx.DefaultPosition, wx.DefaultSize, 0)bSizer51.Add(self.m_button25, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 1050)self.m_button24 = wx.Button(sbSizer1.GetStaticBox(), wx.ID_ANY, u"退出", wx.DefaultPosition, wx.DefaultSize, 0)bSizer51.Add(self.m_button24, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 20)sbSizer1.Add(bSizer51, 1, wx.EXPAND, 5)bSizer52 = wx.BoxSizer(wx.VERTICAL)self.m_grid1 = wx.grid.Grid(sbSizer1.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.Size(2000, 400), 0)# Gridself.m_grid1.CreateGrid(0, 9)self.m_grid1.EnableEditing(False)self.m_grid1.EnableGridLines(True)self.m_grid1.EnableDragGridSize(True)self.m_grid1.SetMargins(0, 0)# Columnsself.m_grid1.EnableDragColMove(False)self.m_grid1.EnableDragColSize(False)self.m_grid1.SetColLabelSize(50)self.m_grid1.SetColLabelValue(0, u"单号")self.m_grid1.SetColLabelValue(1, u"需求描述")self.m_grid1.SetColLabelValue(2, u"需求来源")self.m_grid1.SetColLabelValue(3, u"创建人")self.m_grid1.SetColLabelValue(4, u"流程状态")self.m_grid1.SetColLabelValue(5, u"问题来源")self.m_grid1.SetColLabelValue(6, u"项目状态")self.m_grid1.SetColLabelValue(7, u"严重等级")self.m_grid1.SetColLabelValue(8, u"创建日期")self.m_grid1.SetColLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)# Rowsself.m_grid1.EnableDragRowSize(True)self.m_grid1.SetRowLabelSize(50)self.m_grid1.SetRowLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)# Label Appearance# Cell Defaultsself.m_grid1.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_TOP)bSizer52.Add(self.m_grid1, 0, wx.ALL, 10)sbSizer1.Add(bSizer52, 3, wx.EXPAND, 20)bSizer57 = wx.BoxSizer(wx.HORIZONTAL)self.m_staticText451 = wx.StaticText(sbSizer1.GetStaticBox(), wx.ID_ANY, u"共 页", wx.DefaultPosition,wx.DefaultSize, 0)self.m_staticText451.Wrap(-1)bSizer57.Add(self.m_staticText451, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 500)self.m_textCtrl251 = wx.TextCtrl(sbSizer1.GetStaticBox(), wx.ID_ANY, wx.EmptyString, wx.DefaultPosition,wx.Size(40, -1), 0)bSizer57.Add(self.m_textCtrl251, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 15)self.m_button28 = wx.Button(sbSizer1.GetStaticBox(), wx.ID_ANY, u"跳转", wx.DefaultPosition, wx.DefaultSize, 0)bSizer57.Add(self.m_button28, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5)self.m_button29 = wx.Button(sbSizer1.GetStaticBox(), wx.ID_ANY, u"上一页", wx.DefaultPosition, wx.DefaultSize, 0)bSizer57.Add(self.m_button29, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5)self.m_button30 = wx.Button(sbSizer1.GetStaticBox(), wx.ID_ANY, u"下一页", wx.DefaultPosition, wx.DefaultSize, 0)bSizer57.Add(self.m_button30, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5)sbSizer1.Add(bSizer57, 1, wx.EXPAND, 5)self.m_panel23.SetSizer(sbSizer1)self.m_panel23.Layout()sbSizer1.Fit(self.m_panel23)self.m_notebook6.AddPage(self.m_panel23, u"主界面", True)bSizer20.Add(self.m_notebook6, 1, wx.EXPAND | wx.ALL, 5)self.SetSizer(bSizer20)self.Layout()self.Centre(wx.BOTH)##************************************### TODO# 窗口关闭事件self.Bind(wx.EVT_CLOSE, self.exit_sys)# 退出系统self.m_button24.Bind(wx.EVT_BUTTON, self.quit)self.m_button24.Bind(wx.EVT_LEFT_DOWN, self.change_color_4)# 系统主界面展示信息self.cur_page_idx = 0bill_total_nums = self.get_menu_bill_nums()if bill_total_nums:total_pages, page_nums_list = self.split_bill_view(bill_total_nums)self.get_bill_data(0, page_nums_list)self.m_staticText451.SetLabel("共" + str(total_pages) + "页")self.m_textCtrl251.SetValue(str(self.cur_page_idx + 1))else:self.m_staticText451.SetLabel("共" + str(0) + "页")# 实现上下翻页以及单号显示数据跳转功能self.m_button29.Bind(wx.EVT_LEFT_DOWN, self.open_last_page)  # 上一页self.m_button30.Bind(wx.EVT_LEFT_DOWN, self.open_next_page)  # 下一页self.m_button28.Bind(wx.EVT_LEFT_DOWN, self.open_special_page)  # 跳转页面def __del__(self):passdef exit_sys(self, event):toastone = wx.MessageDialog(None, "确定要退出系统吗?", "确认信息提示",wx.YES_NO | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框sys.exit(1)if toastone.ShowModal() == wx.ID_NO:toastone.Destroy()  # 则关闭提示框def change_color_2(self, event):self.m_button25.SetBackgroundColour(wx.Colour("yellow"))event.Skip()def change_color_4(self, event):self.m_button24.SetBackgroundColour(wx.Colour("red"))event.Skip()def open_last_page(self, event):# 打开上一页bill_total_nums = self.get_menu_bill_nums()if bill_total_nums:total_pages, page_nums_list = self.split_bill_view(bill_total_nums)if self.cur_page_idx == 0:toastone = wx.MessageDialog(None, "已位于首页,无法跳到上一页!", "消息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框# self.get_bill_data(total_pages - 1, page_nums_list)# self.cur_page_idx = total_pages - 1else:self.get_bill_data(self.cur_page_idx - 1, page_nums_list)self.cur_page_idx -= 1self.m_textCtrl251.SetValue(str(self.cur_page_idx + 1))else:if self.cur_page_idx == 0:toastone = wx.MessageDialog(None, "已位于首页,无法跳到上一页!", "消息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框def open_next_page(self, event):# 打开下一页bill_total_nums = self.get_menu_bill_nums()if bill_total_nums:total_pages, page_nums_list = self.split_bill_view(bill_total_nums)if self.cur_page_idx == total_pages - 1:toastone = wx.MessageDialog(None, "已位于最后一页,无法跳到下一页!", "消息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框# self.get_bill_data(0, page_nums_list)# self.cur_page_idx = 0else:self.get_bill_data(self.cur_page_idx + 1, page_nums_list)self.cur_page_idx += 1self.m_textCtrl251.SetValue(str(self.cur_page_idx + 1))else:if self.cur_page_idx == 0:toastone = wx.MessageDialog(None, "已位于最后一页,无法跳到下一页!", "消息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框def open_special_page(self, event):# 跳转到特定的页面try:temp_page_num = int(self.m_textCtrl251.GetValue())bill_total_nums = self.get_menu_bill_nums()if bill_total_nums:total_pages, page_nums_list = self.split_bill_view(bill_total_nums)if (temp_page_num <= total_pages) and (temp_page_num >= 1):page_idx = temp_page_num - 1self.get_bill_data(page_idx, page_nums_list)self.cur_page_idx = page_idxself.m_textCtrl251.SetValue(str(self.cur_page_idx + 1))else:total_pages = self.split_bill_view(bill_total_nums)[0]toastone = wx.MessageDialog(None, "请输入%s范围内的有效数字" % str([1, total_pages]), "错误信息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框else:toastone = wx.MessageDialog(None, "系统还没有创建任何单号信息哦!", "信息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框except ValueError:bill_total_nums = self.get_menu_bill_nums()if bill_total_nums:total_pages = self.split_bill_view(bill_total_nums)[0]toastone = wx.MessageDialog(None, "请输入%s范围内的有效数字" % str([1, total_pages]), "错误信息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框else:toastone = wx.MessageDialog(None, "系统还没有创建任何单号信息哦!", "信息提示",wx.YES_DEFAULT | wx.ICON_QUESTION)if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮toastone.Destroy()  # 则关闭提示框def get_menu_bill_nums(self):cur_path = os.path.dirname(os.path.realpath(__file__))filename = os.path.join(cur_path, "单号总表.xlsx")exe_excel = excel(filename, sheet_idx=0)id_list = exe_excel.getColValues(column=1)[1:]# 统计系统目前存在多少单号for i in range(len(id_list)):if id_list[i].strip() == "":id_list.pop(i)bill_total_nums = len(id_list)return bill_total_numsdef split_bill_view(self, bill_total_nums):if bill_total_nums % view_bill_nums > 0:total_pages = bill_total_nums // view_bill_nums + 1else:total_pages = bill_total_nums // view_bill_numslast_page_nums = bill_total_nums % view_bill_numspage_nums_list = []# page_nums_list表示每页展示的单号个数if (total_pages >= 1) and (last_page_nums == 0):last_page_nums = view_bill_numsif total_pages <= 1:page_nums_list.append(last_page_nums)else:page_nums_list.extend([view_bill_nums] * (total_pages - 1) + [last_page_nums])return total_pages, page_nums_listdef get_bill_data(self, page_idx, page_nums_list):# excel序号从1开始,grid控件序号从0开始row_nums = self.m_grid1.GetNumberRows()if row_nums > 0:self.m_grid1.DeleteRows(pos=0, numRows=row_nums)cur_path = os.path.dirname(os.path.realpath(__file__))filename = os.path.join(cur_path, "单号总表.xlsx")exe_excel = excel(filename, sheet_idx=0)rows = exe_excel.getRowsClosNum()[0]remain_rows_list = list(range(2, rows+1))[::-1][(view_bill_nums * page_idx):]curr_rows_list = remain_rows_list[:page_nums_list[page_idx]]column_idx_list = []for i in range(len(bill_view_list)):column_idx_list.append(excel_bill_list.index(bill_view_list[i]))count = -1for row in curr_rows_list:count += 1self.m_grid1.InsertRows(pos=count, numRows=1, updateLabels=True)row_data = exe_excel.getRowValues(row)default_col_size = 100col_size_list = [default_col_size] * len(bill_view_list)id_idx = bill_view_list.index("单号")task_idx = bill_view_list.index("需求描述")flow_idx = bill_view_list.index("流程状态")col_size_list[id_idx] = 150col_size_list[task_idx] = 200col_size_list[flow_idx] = 200default_row_size = 32for col in range(len(bill_view_list)):self.m_grid1.SetCellValue(count, col, str(row_data[column_idx_list[col]]))# self.m_grid1.AutoSize()  # 根据字体长度自动调整列宽self.m_grid1.SetColSize(col, col_size_list[col])self.m_grid1.SetRowSize(count, default_row_size)if col == 1:self.m_grid1.SetCellAlignment(count, col, wx.ALIGN_LEFT, wx.ALIGN_CENTRE)else:self.m_grid1.SetCellAlignment(count, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)for row in range(count + 1):id_idx = bill_view_list.index("单号")demand_idx = bill_view_list.index("需求来源")self.m_grid1.SetCellTextColour(row, id_idx, wx.Colour("blue"))self.m_grid1.SetCellTextColour(row, demand_idx, wx.Colour("blue"))def quit(self, event):self.Destroy()sys.exit(0)def main():app = wx.App()frame = Menu_Frame(None)frame.Show()app.MainLoop()if __name__ == '__main__':main()

3. 代码适配指南

3.1 修改界面显示的内容

3.1.1 列标题数量不变的情况

与程序代码所在的.py文件同级的目录下面应该放置一个命名为“单号总表.xlsx”的表格,里面记录需要在界面上显示的数据。

在这里插入图片描述

可以修改“单号总表.xlsx”表格第一行的表头标题,更换需要在界面上显示的内容,但是列标题的数量不变还是9个。同时记得修改代码处全局的excel_bill_list这个列表,这个列表是用来记录表格“单号总表.xlsx”第一行列标题的。

bill_view_list这个列表是用来指定grid按照什么顺序显示“单号总表.xlsx”第一行列标题的。

在这里插入图片描述

还需要修改界面初始化设置代码处m_grid1每列显示的标题,与bill_view_list这个列表保持一致。

在这里插入图片描述

以上是grid显示的列数不变的情况,也就是说列标题还是9个只是内容替换了,如果列数少于9个,还需要调整grid初始化设置时候的列数;如果列数多于9个,不仅要修改grid初始化设置时的列数,为保证界面的美观,还需要调整grid的默认大小以及界面的大小等等,具体视情况而定。

3.1.2 列标题数量减少的情况

界面上需要呈现的内容只有5列,在原有程序代码的基础上,需要做如下适配。

需要保证“单号总表.xlsx”的列标题个数和两个列表bill_view_list和excel_bill_list的成员个数一致,都为5个。

在这里插入图片描述

grid初始化的列数设置:

在这里插入图片描述

grid的列标题设置,注意需要与列表bill_view_list成员顺序保持一致:

在这里插入图片描述

代码修改后的界面显示情况:

在这里插入图片描述

为保证界面的美观度,还需要适当的调整grid的行列宽度,行列宽度可以根据每列单元格需要显示的字数来设置,下面会具体介绍如何修改grid的行列宽度。

3.1.3 列标题数量增加的情况

列标题在9个的基础上增加2个,需要保证“单号总表.xlsx”的列标题个数和两个列表bill_view_list和excel_bill_list的成员个数一致,都为11个。

在这里插入图片描述

grid初始化的列数设置:

在这里插入图片描述

grid的列标题设置,注意需要与列表bill_view_list成员顺序保持一致:

在这里插入图片描述

3.2 修改界面每一页的数据显示个数

目前界面呈现的效果是一共70个数据,每页显示10个数据,一共7页可以上下翻页。

可以通过修改全局变量view_bill_nums指定界面每页显示的数据个数。

在这里插入图片描述

3.3 修改grid单元格的行宽和列宽

需要修改grid单元格的行列宽度可以在函数get_bill_data()处修改设置行列宽度的代码,grid采用SetColSize设置列宽,grid采用SetRowSize设置行宽。

    def get_bill_data(self, page_idx, page_nums_list):# excel序号从1开始,grid控件序号从0开始row_nums = self.m_grid1.GetNumberRows()if row_nums > 0:self.m_grid1.DeleteRows(pos=0, numRows=row_nums)cur_path = os.path.dirname(os.path.realpath(__file__))filename = os.path.join(cur_path, "单号总表.xlsx")exe_excel = excel(filename, sheet_idx=0)rows = exe_excel.getRowsClosNum()[0]from vactor_manage import view_bill_numsremain_rows_list = list(range(2, rows+1))[::-1][(view_bill_nums * page_idx):]curr_rows_list = remain_rows_list[:page_nums_list[page_idx]]column_idx_list = []for i in range(len(bill_view_list)):column_idx_list.append(excel_bill_list.index(bill_view_list[i]))count = -1for row in curr_rows_list:count += 1self.m_grid1.InsertRows(pos=count, numRows=1, updateLabels=True)row_data = exe_excel.getRowValues(row)default_col_size = 100col_size_list = [default_col_size] * len(bill_view_list)id_idx = bill_view_list.index("单号")task_idx = bill_view_list.index("需求描述")flow_idx = bill_view_list.index("流程状态")col_size_list[id_idx] = 150col_size_list[task_idx] = 200col_size_list[flow_idx] = 200default_row_size = 32for col in range(len(bill_view_list)):self.m_grid1.SetCellValue(count, col, str(row_data[column_idx_list[col]]))# self.m_grid1.AutoSize()  # 根据字体长度自动调整列宽self.m_grid1.SetColSize(col, col_size_list[col])self.m_grid1.SetRowSize(count, default_row_size)if col == 1:self.m_grid1.SetCellAlignment(count, col, wx.ALIGN_LEFT, wx.ALIGN_CENTRE)else:self.m_grid1.SetCellAlignment(count, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)for row in range(count + 1):id_idx = bill_view_list.index("单号")demand_idx = bill_view_list.index("需求来源")self.m_grid1.SetCellTextColour(row, id_idx, wx.Colour("blue"))self.m_grid1.SetCellTextColour(row, demand_idx, wx.Colour("blue"))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15989.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图像分割】基于matlab直方图的自适应阈值方法分割前景与背景【含Matlab源码 2144期】

一、一种基于直方图的实时自适应阈值分割方法简介 1 引言 在交通管理中&#xff0c;为了获得车辆的运动数据&#xff0c;需要对交通视频进行实时监测&#xff0c;从监测图像序列中检测出运动对象&#xff0c;并对运动对象进行分析处理&#xff0c;从而获得车辆和行人的运动数据…

EMQX Cloud 影子服务:便捷数据缓存服务,加速 IoT 应用开发

全托管 MQTT 消息云服务 EMQX Cloud 可以帮助用户轻松将各类物联网设备连接上云&#xff0c;提供与各类第三方服务的数据集成&#xff0c;助力用户进行高效的数据处理、存储与分析。 为了实现更加便捷的物联网数据处理&#xff0c;进一步简化用户构建物联网应用的开发流程&…

好心情精神心理科:抑郁症,真的会让你变丑!

有患者向好心情平台咨询&#xff1a;“抑郁症多年&#xff0c;我总感觉自己变丑了&#xff0c;脸色也不咋好看&#xff0c;这到底是我的心理作用&#xff0c;还是容貌真有变化呢&#xff1f;” 变丑这件事&#xff0c;不致命&#xff0c;但对于很多人来说&#xff0c;却似乎难…

net转java学习笔记-sqlserver的问题记录

最近公司有个.net项目&#xff0c;用的不是mysql是sqlserver&#xff0c;中间遇到几次问题记录下。 1.navicat连接sqlserver失败 百度了一下这个是缺少了驱动&#xff0c;其实navicat自带了这个驱动&#xff0c;没有安装而已。 打开Navicat的安装路径&#xff0c;Navicat自带s…

qsort:我很强,了解一下(详解过程)

了解qsort&#xff0c;以及模拟实现&#x1f391;情境引入&#x1f388;qsort&#x1f4d6;qsort的头文件&#x1f4c4;开场&#x1f511;qsort的参数&#x1f914;为什么可以对任意类型排序呢&#xff1f;&#x1f4dc;参数参数①参数②参数③最难的参数④&#x1f383;qsort应…

一个完全纯净的windows资源站

网址:https://hellowindows.cn/ hello Windows呢是一个纯净的Windows系统下载网站&#xff0c;从已经淘汰的xp到新推出的win11&#xff0c;大部分的系统版本都涵盖了 且都是中文版本,更加方便 windows server版本也包括在内哦

17 -- 排序算法之希尔排序

希尔排序算法介绍: 希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 写入排序法的基本思想: 希尔排序十八记录按下标的一定增量分组,对每组使用直接插入算法排序:随着增量逐渐…

JAVA毕设项目京东仓库管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目京东仓库管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

好心情精神心理科医生:哪些精神类药物会影响你的睡眠?

患病后的你是否也因有这种顾虑&#xff0c;迟迟不敢吃药或选择停药呢&#xff1f; 到底哪些精神科药物会引起睡眠问题呢&#xff1f;资料显示&#xff0c;凡是提高多巴胺能和去甲肾上腺素能的药物&#xff0c;都有可能引起睡眠问题。今天&#xff0c;好心情小编带大家一起来看…

G:\r\tcga_example-master\scripts 生存分析 tcgaexample jimmy

G:\r\tcga_example-master\scripts library(survival) library(survminer)## 批量生存分析 使用 coxph 回归方法 # http://www.sthda.com/english/wiki/cox-proportional-hazards-model colnames(phe) head(phe) #event中1 表示存活&#xff08;终点事件&#xff09; #htt…

15Spring Boot整合MyBatis

MyBatis 是一个半自动化的 ORM 框架&#xff0c;所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上&#xff0c;而实体到数据库的映射则需要我们自己编写 SQL 语句实现&#xff0c;相较于Hibernate 这种完全自动化的框架&#xff0c;Mybatis 更加灵活&am…

windows下Redis多实例部署

当存在多个项目的时候&#xff0c;需要同时部署时&#xff0c;且只有一台服务器时&#xff0c;哪么就需要部署Redis多个实例&#xff0c;原理很简单&#xff0c;多个Redis服务运行使用不同的配置及数据管理。 具体操作如下&#xff1a; 1、进入redis安装目录&#xff0c;找到…

zerotier的planet服务器(根服务器)-搭建教程

应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。 准备工具: 1、服务端:云服务器(有公网IP)Centos 7.62、客户端: 工控机(或者家里电脑)(Linux) ,公司电脑Windows 搭建私有化 ZeroTier步骤: 一、云服务器上安装服务操作…

python如何制作并安装自建包?

一、依赖 首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pip install wheel --force-reinstallpip install setuptools --force-reinstall 二、准备文件在create_package文件夹下,制作自定义包(myPackage): 在该包下,有aa.py和bb.py两个模块, 同时该包…

win11怎么回去win10?四种方法教你!

win11系统与旧系统相比&#xff0c;在这些方面进行了重大更新&#xff1a;新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口&#xff0c;确实给用户带来了不一样的体验。然而&#xff0c;win11有时漏洞频出、BUG不断和兼容性不佳的问题&#xff0c;让很多升级w…

(附源码)springboot企业合同管理系统 毕业设计 161456

springboot企业合同管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业合同等问…

安装CUDA、anaconda、pytorch

文章目录前言一、CUDA安装1.查看CUDA版本2.安装CUDA2.1 下载CUDA2.2 安装CUDA2.3 测试CUDA安装成功二、anaconda安装1.anaconda下载2.anaconda环境变量配置3.测试anaconda安装成功3.anaconda常见命令操作3.1 清华镜像3.2 切换虚拟环境三、pytorch安装1.anaconda下pytorch安装2.…

YOLOV5模型转onnx并推理

YOLOV5模型转onnx并推理模型转onnx普通模型转onnxyolov5模型转onnxonnx 推理普通模型yolov5模型一、推理二、坐标转换三、非极大值抑制四、根据置信度过滤无用框五、画图六、总代码模型转onnx 普通模型转onnx 加载模型&#xff0c;需要是torch.save保存的模型指定输入输出的名…

模板建立

模板建立 步骤如果还没有建立一个组存储自己的模板,则先选择2(红框处)然后取个名字就好如果已经有组了,在自己建立的组内添加新模板1:后续快速生成使用的代码 2:对该模板的描述 3.模板代码 4.应该是为这个模版声明对应的语言(后附展示具体界面)根据需要选择语言,一般为java,也有…

JMeter详细安装教程

文章目录1 运行环境配置2 JMeter下载3 JMeter环境变量配置与启动3.1 环境变量配置3.2 启动1 运行环境配置 JMeter运行需要java环境&#xff0c;安装JMeter前需要安装配置好Java&#xff0c;参考文章Java环境变量配置详细教程 2 JMeter下载 下载地址&#xff1a;http://jmete…