使用Python 2.7.3和Qt Designer 4.8.2:我是Qt的新手,我怎样才能创建一个可点击的简单网格区域来生成地图?下图说明了我的意图。
本质上我的主要问题是网格区域,我无法在Qt中看到任何类似“现成”的内容。
答案 0 :(得分:2)
最近的等值似乎是QTableWidget。
这是一个粗略的演示,应该为您提供正确的方向:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self, rows, columns):
QtGui.QWidget.__init__(self)
self.table = QtGui.QTableWidget(rows, columns, self)
self.table.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
header = self.table.horizontalHeader()
header.setResizeMode(QtGui.QHeaderView.Fixed)
header.setDefaultSectionSize(25)
header.hide()
header = self.table.verticalHeader()
header.setResizeMode(QtGui.QHeaderView.Fixed)
header.setDefaultSectionSize(25)
for row in range(rows):
item = QtGui.QTableWidgetItem('0x00')
self.table.setVerticalHeaderItem(row, item)
for column in range(columns):
item = QtGui.QTableWidgetItem()
item.setBackground(QtCore.Qt.white)
self.table.setItem(row, column, item)
self.table.itemPressed.connect(self.handleItemPressed)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.table)
def handleItemPressed(self, item):
if item.background().color() == QtCore.Qt.black:
item.setBackground(QtCore.Qt.white)
else:
item.setBackground(QtCore.Qt.black)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window(4, 8)
window.resize(300, 150)
window.show()
sys.exit(app.exec_())
答案 1 :(得分:1)
一个(笨重?)解决方案是使用带有像素图集的标签小部件绘制地图图像。您可以通过在该窗口小部件上侦听mousePressEvent
来获得点击功能,在该窗口小部件上,您可以获得包含鼠标x,y位置的QMouseEvent
对象(全局和相对于单击的窗口小部件)。然后,可以使用它来确定单击图像的位置。