class Table(QWidget): switch_window1 = QtCore.pyqtSignal(str) # 跳转信号 def init(self, arg=None): super(Table, self).init(arg) def create(self,string): self.setWindowTitle("QTableView表格视图控件的例子") self.resize(540,450); self.model=QStandardItemModel(1,1); self.model.setHorizontalHeaderLabels(['品牌']) try: select_sqli = "SELECT distinct chexing FROM sheji.canshu where chexi='"+string+"' ;" cur.execute(select_sqli) data=cur.fetchall() except Exception as e: print("创建数据表失败:", e) else: print("创建数据表成功;") x = 0 for i in data: y = 0 for j in i: self.model.setItem(x,y,QStandardItem(str(data[x][y]))) y = y + 1 x = x + 1 '''for row in range(8): for column in range(8): item = QStandardItem("row %s, column %s"%(row,column)) self.model.setItem(row, column, item)''' self.tableView=QTableView() self.tableView.setModel(self.model) self.tableView.verticalHeader().hide() self.tableView.clicked.connect(self.table_left_click) for i in range(x): self.tableView.setRowHeight(i, 66) for i in range(y): self.tableView.setColumnWidth(i, 500) self.tableView.setIconSize(QSize(60,60)) #下面代码让表格100填满窗口 #self.tableView.horizontalHeader().setStretchLastSection(True) #self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) dlgLayout=QVBoxLayout(); dlgLayout.addWidget(self.tableView) self.setLayout(dlgLayout) def table_left_click(self, item): # item 是你点击的那个单元格对象 sf = "You clicked on {0}x{1}".format(item.column(), item.row()) t=self.model.itemData(self.model.index(self.tableView.currentIndex().row(), self.tableView.currentIndex().column()))[0] print(t) print(sf) self.switch_window1.emit(t) 设置这个的背景颜色
时间: 2024-02-29 15:53:23 浏览: 110
在这个代码中,可以使用类似上面给出的QTableWidget的样式表方式来设置QTableView的背景颜色。具体方法是,在Table类的create方法中添加以下代码:
```python
self.tableView.setStyleSheet('background-color: #f5f5f5;') # 设置背景颜色为浅灰色
```
这样就可以将QTableView的背景颜色设置为浅灰色。如果需要设置QStandardItemModel的单元格背景颜色,可以使用下面的代码:
```python
item = QStandardItem("example")
item.setBackground(QColor(255, 0, 0)) # 设置单元格背景颜色为红色
self.model.setItem(0, 0, item) # 设置第一行第一列的单元格内容和背景颜色
```
其中,QColor(255, 0, 0)表示红色,可以根据需要调整颜色参数。
相关问题
import pandas as pd from PyQt5.QtWidgets import QApplication, QTableView, QMainWindow, QVBoxLayout, QWidget, QPushButton, QFileDialogfrom PyQt5 import QtCoreclass ExcelViewer(QMainWindow): def __init__(self): super().__init__() self.df = None # 初始值为 None self.table_view = QTableView() self.setCentralWidget(self.table_view) self.initUI() def initUI(self): self.setWindowTitle("Excel Viewer") self.resize(800, 600) # 添加查询按钮 self.button = QPushButton("查询", self) self.button.setGeometry(QtCore.QRect(340, 20, 80, 30)) self.button.clicked.connect(self.selectExcel) def selectExcel(self): # 弹出文件选择窗口 file_path, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel Files (*.xlsx *.xls)") if file_path: # 读取 Excel 文件并将其转换为 pandas DataFrame 对象 self.df = pd.read_excel(file_path) # 将 DataFrame 数据设置为表格模型并在 QTableView 中显示 model = pdTableModel(self.df) self.table_view.setModel(model)class pdTableModel(QtCore.QAbstractTableModel): def __init__(self, data): super().__init__() self._data = data def data(self, index, role): if role == QtCore.Qt.DisplayRole: return str(self._data.iloc[index.row(), index.column()]) def rowCount(self, index): return self._data.shape[0] def columnCount(self, index): return self._data.shape[1]if __name__ == '__main__': app = QApplication([]) excel_viewer = ExcelViewer() excel_viewer.show() app.exec_()帮我修改,不需要自己选择文件
好的,如果不需要手动选择文件,可以在 ExcelViewer 类的 initUI() 方法中直接调用 pd.read_excel() 方法读取固定的 Excel 文件,代码如下:
```python
import pandas as pd
from PyQt5.QtWidgets import QApplication, QTableView, QMainWindow, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PyQt5 import QtCore
class ExcelViewer(QMainWindow):
def __init__(self):
super().__init__()
self.df = None # 初始值为 None
self.table_view = QTableView()
self.setCentralWidget(self.table_view)
self.initUI()
def initUI(self):
self.setWindowTitle("Excel Viewer")
self.resize(800, 600)
# 添加查询按钮
self.button = QPushButton("查询", self)
self.button.setGeometry(QtCore.QRect(340, 20, 80, 30))
self.button.clicked.connect(self.selectExcel)
def selectExcel(self):
# 读取 Excel 文件并将其转换为 pandas DataFrame 对象
self.df = pd.read_excel("example.xlsx")
# 将 DataFrame 数据设置为表格模型并在 QTableView 中显示
model = pdTableModel(self.df)
self.table_view.setModel(model)
class pdTableModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def data(self, index, role):
if role == QtCore.Qt.DisplayRole:
return str(self._data.iloc[index.row(), index.column()])
def rowCount(self, index):
return self._data.shape[0]
def columnCount(self, index):
return self._data.shape[1]
if __name__ == '__main__':
app = QApplication([])
excel_viewer = ExcelViewer()
excel_viewer.show()
app.exec_()
```
在这里,我们直接将文件名设置为 "example.xlsx",并在 selectExcel() 方法中删除了弹出文件选择窗口的代码,这样程序启动后,表格中就会显示 example.xlsx 文件的内容。
import pandas as pd from PyQt5.QtWidgets import QApplication, QTableView, QMainWindow, QVBoxLayout, QWidget class ExcelViewer(QMainWindow): def __init__(self, file_path): super().__init__() # 读取 Excel 文件并将其转换为 pandas DataFrame 对象 self.df = pd.read_excel(file_path) # 创建 QTableView 组件并将其设置为中心窗口部件 self.table_view = QTableView() self.setCentralWidget(self.table_view) # 将 DataFrame 数据设置为表格模型并在 QTableView 中显示 model = pdTableModel(self.df) self.table_view.setModel(model) class pdTableModel(QtCore.QAbstractTableModel): def __init__(self, data): super().__init__() self._data = data def data(self, index, role): if role == QtCore.Qt.DisplayRole: return str(self._data.iloc[index.row(), index.column()]) def rowCount(self, index): return self._data.shape[0] def columnCount(self, index): return self._data.shape[1] if __name__ == '__main__': app = QApplication([]) excel_viewer = ExcelViewer('example.xlsx') excel_viewer.show() app.exec_()帮我修改成按查询按钮显示Excel
好的,以下是修改后的代码,添加了一个查询按钮和一个槽函数,点击查询按钮后会弹出一个文件选择窗口,用户选择Excel文件后,程序会读取该文件并在主窗口中显示:
```
import pandas as pd
from PyQt5.QtWidgets import QApplication, QTableView, QMainWindow, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PyQt5 import QtCore
class ExcelViewer(QMainWindow):
def __init__(self):
super().__init__()
self.df = None # 初始值为 None
self.table_view = QTableView()
self.setCentralWidget(self.table_view)
self.initUI()
def initUI(self):
self.setWindowTitle("Excel Viewer")
self.resize(800, 600)
# 添加查询按钮
self.button = QPushButton("查询", self)
self.button.setGeometry(QtCore.QRect(340, 20, 80, 30))
self.button.clicked.connect(self.selectExcel)
def selectExcel(self):
# 弹出文件选择窗口
file_path, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel Files (*.xlsx *.xls)")
if file_path:
# 读取 Excel 文件并将其转换为 pandas DataFrame 对象
self.df = pd.read_excel(file_path)
# 将 DataFrame 数据设置为表格模型并在 QTableView 中显示
model = pdTableModel(self.df)
self.table_view.setModel(model)
class pdTableModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def data(self, index, role):
if role == QtCore.Qt.DisplayRole:
return str(self._data.iloc[index.row(), index.column()])
def rowCount(self, index):
return self._data.shape[0]
def columnCount(self, index):
return self._data.shape[1]
if __name__ == '__main__':
app = QApplication([])
excel_viewer = ExcelViewer()
excel_viewer.show()
app.exec_()
```
注意事项:
1. `ExcelViewer` 类的构造函数中不再接收 `file_path` 参数,因为文件路径是在点击查询按钮后由用户选择的。
2. `ExcelViewer` 类中添加了一个 `selectExcel` 槽函数,用于响应用户点击查询按钮的事件。
3. `selectExcel` 槽函数通过调用 `QFileDialog.getOpenFileName` 方法弹出文件选择窗口,让用户选择 Excel 文件。
4. `selectExcel` 槽函数读取用户选择的 Excel 文件并将其转换为 pandas DataFrame 对象,如果读取成功则将其在主窗口中显示。
阅读全文