Python PyQt:小部件和按钮
我想使用PyQt创建一个用户界面,该界面符合以下规则:Python PyQt:小部件和按钮,python,pyqt4,Python,Pyqt4,我想使用PyQt创建一个用户界面,该界面符合以下规则: 电路板由大小为(s,s)的二维网格和奇数整数组成 此网格的每个小部件都是一个按钮 当我们初始化UI时,每个按钮都被禁用,除了中间的按钮(在位置((s-1)//2,(s-1)//2) 每次我点击一个已启用的按钮,它都会被禁用,并且它的所有邻居都会被启用。例如,在开始时,我必须点击((s-1)//2,(s-1)//2)按钮。然后它会被禁用,按钮((s-3)//2,(s-1)//2,(s-1)//2,(s-1)//2,(s-3)//2),((s
- 电路板由大小为(s,s)的二维网格和奇数整数组成
- 此网格的每个小部件都是一个按钮
- 当我们初始化UI时,每个按钮都被禁用,除了中间的按钮(在位置((s-1)//2,(s-1)//2)
- 每次我点击一个已启用的按钮,它都会被禁用,并且它的所有邻居都会被启用。例如,在开始时,我必须点击((s-1)//2,(s-1)//2)按钮。然后它会被禁用,按钮((s-3)//2,(s-1)//2,(s-1)//2,(s-1)//2,(s-3)//2),((s-1)//2)(s-1)//2)会被启用
假设
neights
做了您想做的事情(您还没有包含那一段代码),您需要在的小部件上调用setEnabled()
import sys
import numpy as np
from PyQt4 import QtGui
class InterfaceGraphique(QtGui.QWidget):
def __init__(self,size):
super(InterfaceGraphique, self).__init__()
self.size=size
self.position=((size-1)//2,(size-1)//2)
self.initUI(size)
def initUI(self,size):
self.grid = QtGui.QGridLayout()
self.setLayout(self.grid)
names=list(map(lambda x: str(x),np.random.choice(10,size**2)))
positions = [(i, j) for i in range(size) for j in range(size)]
for position, name in zip(positions, names):
button = QtGui.QPushButton(name)
button.clicked.connect(self.mouseClickEvent)
self.grid.addWidget(button, *position)
self.move(300, 150)
self.setWindowTitle('Game')
self.show()
def mouseClickEvent(self):
button=self.sender()
idx = self.grid.indexOf(button)
location = self.grid.getItemPosition(idx)
# QtGui.QGridLayout.itemAtPosition(self.grid,*location).setEnabled(False)
# for neighbor in neighbors(location)
# QtGui.QGridLayout.itemAtPosition(self.grid,*neighbor).setEnabled(True)
self.position=location
size=5
def main():
app = QtGui.QApplication(sys.argv)
ex = InterfaceGraphique(size)
app.exec_()
if __name__ == '__main__':
main()
self.grid.itemAtPosition(*neighbour).widget().setEnabled(True)