pyqt中如何从一个类中调用某个部件?
为了巩固pyqt,我最近在写一个比较大的应用,会遇到在一个类中对另一个类中的部件进行操作的情况。
比如,一个类定义了gui中显示数据的表格qtable,现在我要在另一个类中对这个表格进行操作,需要能够对数据进行提取,修改和保存等,同时也可以对表格的大小进行修改。
那么我要怎么办呢?目前使用数组存取表格的数据并进行操作,而对表格大小的修改是直接声明全局变量的:global qtable
这样做虽然能够实现,但总觉得不好,想问下大家如何实现。
比如这样的代码,怎样避免使用global,或者有什么其他的实现方法吗?
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self)
load_file = QtGui.QAction("Load", self)
load_file.triggered.connect(self.loadFile)
save_file = QtGui.QAction("Save", self)
save_file.triggered.connect(self.saveFile)
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction(load_file)
file.addAction(save_file)
self.tab = Tab()
self.setCentralWidget(self.tab)
def loadFile(self):
load_file = QtGui.QFileDialog.getOpenFileName(self, "Open file", "./", "All files(*)")
if load_file:
with open(load_file, "r") as load_data:
data = eval(load_data.read())
table.filling(data)
def saveFile(self):
save_file = QtGui.QFileDialog.getSaveFileName(self, "Save file", "./", "All files(*)")
if save_file:
with open(save_file, "w") as save_data:
save_data.write(repr(DATA))
class Tab(QtGui.QTabWidget):
def __init__(self, parent=None):
QtGui.QTabWidget.__init__(self)
self.addTab(Table(), "TABS")
class Table(QtGui.QTableWidget):
def __init__(self, parent = None):
QtGui.QTableWidget.__init__(self)
self.setRowCount(4)
self.setColumnCount(2)
self.itemChanged.connect(self.getData)
global table
table = self
def getData(self):
data = []
for row in range(4):
row_data = []
for col in range(2):
if self.item(row, col):
text = self.item(row, col).text()
row_data.append(str(text))
else:
row_data.append("")
data.append(row_data)
global DATA
DATA = data
def filling(self, data):
for row in range(4):
for col in range(2):
new_item = QtGui.QTableWidgetItem("")
self.setItem(row, col, new_item)
self.item(row, col).setText(data[row][col])
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
用信号和槽啊,事件触发
应该使用模型操作。 可以先看一下QT的 MVC架构