Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  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_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement