使用Python 2.7.3和Qt Designer 4.8.2:我是Qt新手,我該如何創建一個可點擊的簡單網格區域來生成地圖?下面的圖片說明了我的意圖。Qt設計器 - 生成地圖的可點擊區域
從本質上講,我的主要問題是網格區域,我無法在Qt中看到任何類似「現成」的東西。
使用Python 2.7.3和Qt Designer 4.8.2:我是Qt新手,我該如何創建一個可點擊的簡單網格區域來生成地圖?下面的圖片說明了我的意圖。Qt設計器 - 生成地圖的可點擊區域
從本質上講,我的主要問題是網格區域,我無法在Qt中看到任何類似「現成」的東西。
一(笨重?)解決方案是使用標籤控件與像素圖組繪製地圖圖像。您可以通過在該窗口小部件上偵聽mousePressEvent
來獲得可點擊的功能,通過該窗口您可以獲得包含鼠標x,y位置(全局和相對於所單擊的窗口小部件)的對象QMouseEvent
。這可以用來確定圖像上的哪個地方被點擊。
最接近的等價物似乎是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_())
EMZ,沒有什麼真正的嘗試 - 這是我的觀點。我已經說過這個,即Qt中的「沒有任何東西」。也許我應該更清楚,道歉。想到的第一件事就是改變顏色的簡單按鈕,但效率不高。我也沒有在給定區域內使用鼠標點擊檢測的示例代碼:一個例子會很好,而不是簡單的嘮叨。 – 2014-12-02 10:25:27
Emz,Python中的一個具體示例 - 我在我的問題中聲明瞭這一點 - 如果您無法回答一個問題,或許最好不要嘗試。 – 2014-12-02 10:38:01