Qt Designer - 可点击区域以生成地图

时间:2014-12-02 09:45:18

标签: python qt grid

使用Python 2.7.3和Qt Designer 4.8.2:我是Qt的新手,我怎样才能创建一个可点击的简单网格区域来生成地图?下图说明了我的意图。

本质上我的主要问题是网格区域,我无法在Qt中看到任何类似“现成”的内容。

enter image description here

2 个答案:

答案 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对象(全局和相对于单击的窗口小部件)。然后,可以使用它来确定单击图像的位置。