gpt4 book ai didi

python - PyQt : Widget and PushButtons

转载 作者:行者123 更新时间:2023-12-01 03:33:31 24 4
gpt4 key购买 nike

使用 PyQt,我想创建一个满足这组规则的用户界面:

  • 棋盘由大小为 (s,s) 的二维网格组成,其中 s 为奇数
  • 这个网格的每个小部件都是一个 QtPushButton
  • 当我们初始化 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- 1)//2,(s-3)//2), ((s-1)//2,(s+1)//2) 已启用。

我遇到的主要问题是,我没有找到任何 Qt 命令来访问网格中预定义位置的按钮。我发现与此最接近的是函数 mouseClickEvent。遗憾的是, QtGui.QGridLayout.itemAtPosition(self.grid,*location).setEnabled(False) 不起作用,因为 QtGui.QGridLayout.itemAtPosition(self.grid,*location) 不是 PushButton,而是 QtWidget。

下面有一些伪代码:它写在#后面。

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()

最佳答案

假设 neighbours 执行了您想要的操作(您没有包含那段代码),您需要在 QWidgetItem 的小部件上调用 setEnabled()

self.grid.itemAtPosition(*neighbour).widget().setEnabled(True)

关于python - PyQt : Widget and PushButtons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40599594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com