SHARE
TWEET

Untitled

a guest Sep 18th, 2019 99 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. import os
  3. from PyQt5.QtWidgets import *
  4. import openpyxl
  5. from PyQt5 import *
  6. from PyQt5.QtGui import QIcon
  7.  
  8. class UI(QMainWindow):
  9.     def __init__(self):
  10.         super().__init__()
  11.  
  12.         self.initUI()
  13.  
  14.     def initUI(self):
  15.         self.resize(400, 400)
  16.         self.move(500, 100)
  17.         self.setWindowTitle('Test')
  18.  
  19.         self.table = QTableWidget()
  20.         self.table.setSelectionBehavior(QAbstractItemView.SelectRows) #设置为单行选中
  21.         self.table.setSelectionMode(QAbstractItemView.SingleSelection) #每次只能选中一行
  22.         self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) #表格不能编辑
  23.         self.table.itemDoubleClicked.connect(self.doubleClickEvent)
  24.         layout = QHBoxLayout()
  25.         layout.addWidget(self.table)
  26.         # 可以根据窗口大小来自适应显示表项
  27.         self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  28.         self.setLayout(layout)
  29.         self.setCentralWidget(self.table)
  30.         self.statusBar()
  31.  
  32.         menu = self.menuBar()
  33.         fileMenu = menu.addMenu("&File")
  34.  
  35.         saveAction = QAction(QIcon('save.png'), '&Save', self)
  36.         saveAction.setShortcut('Ctrl+S')
  37.         saveAction.setStatusTip('Save as')
  38.         saveAction.triggered.connect(self.save)
  39.         fileMenu.addAction(saveAction)
  40.  
  41.         openAction = QAction(QIcon("open.png"), "&Open", self)
  42.         openAction.setShortcut('Ctrl+O')
  43.         openAction.setStatusTip("Open a file")
  44.         openAction.triggered.connect(self.open)
  45.         fileMenu.addAction(openAction)
  46.  
  47.         self.show()
  48.         self.center()
  49.  
  50.     def center(self): #将主窗口放在屏幕的中心
  51.         qr = self.frameGeometry()  # 获得当前组件的特定几何图形
  52.         cp = QDesktopWidget().availableGeometry().center()  # 计算出显示器的绝对值,并获得中心点
  53.         qr.moveCenter(cp)  # 将获得的几何图形的中心点移动到屏幕中心
  54.         self.move(qr.topLeft())  # 将当前组件的左上顶角移动到几何图形的坐上顶角上
  55.  
  56.     def save(self):
  57.         filename, fileType= QFileDialog.getSaveFileName(self,
  58.                                     "Save As",
  59.                                     "C:\\Users\\Administrator\\Desktop",
  60.                                     "Excel Files (*.xlsx)")
  61.         if (filename == ""):
  62.             return None
  63.  
  64.         wb = openpyxl.Workbook()
  65.         sheet = wb["Sheet"]
  66.  
  67.  
  68.         rows = self.table.rowCount()
  69.         cols = self.table.columnCount()
  70.         for i in range(1, cols + 1):
  71.             sheet.cell(1, i).value = str(self.talbeHeadList[i - 1])
  72.         sheet.freeze_panes = "A2"
  73.         for i in range(2, rows + 1):
  74.             for j in range(1, cols + 1):
  75.                 if (self.table.item(i - 1, j - 1) != None):
  76.                     item = self.table.item(i - 1, j - 1)
  77.                     sheet.cell(i, j).value = item.text()
  78.  
  79.         wb.save(filename)
  80.  
  81.     def open(self):
  82.         fileName, filetype = QFileDialog.getOpenFileName(self,
  83.                                                          "Open", #弹窗的标题
  84.                                                          "C:\\Users\\Administrator\\Desktop", #默认的文件路径
  85.                                                          "Excel Files (*.xlsx)")  # 设置文件扩展名过滤,注意用双分号间隔
  86.         # print(fileName)
  87.         if (fileName == ""):
  88.             return None #处理未选择文件的情况
  89.         else:
  90.             self.loadExcelData(fileName) #加载Excel文件中的数据
  91.  
  92.     def loadExcelData(self, filePath): #加载Excel文件中的数据
  93.         # wb = openpyxl.load_workbook("C:\\Users\\Administrator\\Desktop\\Flight\\Test.xlsx")
  94.         wb = openpyxl.load_workbook(filePath)
  95.         sheet1 = wb.active
  96.         rows = sheet1.max_row - sheet1.min_row + 1
  97.         cols = sheet1.max_column - sheet1.min_column + 1
  98.         self.table.setColumnCount(cols)
  99.         self.table.setRowCount(rows - 1)
  100.         self.table.setSortingEnabled(True)
  101.         self.table.resizeColumnsToContents() #将行与列的宽度高度与文本内容的宽高相匹配
  102.         self.table.resizeRowsToContents() #将行与列的宽度高度与文本内容的宽高相匹配
  103.  
  104.         self.talbeHeadList = [] #设置表头
  105.         for i in range(1, cols + 1):
  106.             self.talbeHeadList.append(str(sheet1.cell(1, i).value))
  107.         self.table.setHorizontalHeaderLabels(self.talbeHeadList)
  108.  
  109.         for i in range(2, rows + 1):
  110.             for j in range(1, cols + 1):
  111.                 item = QTableWidgetItem(str(sheet1.cell(i, j).value))
  112.                 item.setTextAlignment(0x0004 | 0x0080)
  113.                 self.table.setItem(i - 2, j - 1, item)
  114.  
  115.     def doubleClickEvent(self):
  116.         self.hide() #隐藏前一个窗口,不然会闪退
  117.         self.clientInfo = ClientInfoWindows()
  118.  
  119. class ClientInfoWindows(QWidget):
  120.     def __init__(self):
  121.         super().__init__()
  122.         self.init()
  123.  
  124.     def init(self):
  125.         self.window = QWidget()
  126.         self.resize(400, 400)
  127.         self.center()
  128.         self.window.show()
  129.  
  130.     def center(self):
  131.         qr = self.frameGeometry()  # 获得当前组件的特定几何图形
  132.         cp = QDesktopWidget().availableGeometry().center()  # 计算出显示器的绝对值,并获得中心点
  133.         qr.moveCenter(cp)  # 将获得的几何图形的中心点移动到屏幕中心
  134.         self.move(qr.topLeft())  # 将当前组件的左上顶角移动到几何图形的坐上顶角上
  135.  
  136. if __name__ == '__main__':
  137.     app = QApplication(sys.argv)
  138.     u = UI()
  139.     sys.exit(app.exec_())
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top