我用pyqt5编程蛇。然后我尝试在构造函数中使用self.spawnFruit()一切正常,我在窗口中看到了水果。但是当我尝试在init()之外使用相同的功能时,窗口上没有任何内容出现。
例如。我有一个Key.Event,如果我按F,它将调用函数self.spawnFruit。
似乎标签在Gui上,但它们是看不见的。
import sys
from PyQt5.QtCore import Qt
import PyQt5.QtWidgets as qw
from PyQt5 import QtGui as gui
from PyQt5 import QtCore as core
import numpy as np
spielfeldgröße = 16
state = [[0 for y in range(spielfeldgröße)] for x in range(spielfeldgröße)]
size = 30#10 pixel
class GameWindow(qw.QWidget):
def __init__(self):
super().__init__()
self.setGeometry(500,500,500,500)
self.spawnFruit() #spawns a fruit
def spawnFruit(self):
fruitpixmap = gui.QPixmap(size,size)
fruitpixmap.fill(Qt.red)
#find available spots to spawn fruits on the map
available = list()
for x in range(spielfeldgröße):
for y in range(spielfeldgröße):
if self.state[x][y] == 0:
available.append((x,y))
lenght = len(available)
rand = np.random.randint(0, lenght)
x,y = available[rand]
print("fruit at:", x, ":", y)
#spawn
label = qw.QLabel(self)
label.setPixmap(fruitpixmap)
label.move(x*size, y*size)
def keyPressEvent(self, event):
if(key == Qt.Key_F):
self.spawnFruit() #doesn't spawns a fruit
else:
super().keyPressEvent(event)
app = qw.QApplication(sys.argv)
win = GameWindow()
win.show()
app.exec_()
请试试这段代码。
说明
有一些观点可以说,但主要问题是为什么新标签不显示?
在python中,有PyQt
和PySide
。我们提前准备小部件,并将它们设置为主要小部件,并在最后一次显示它们。
如果要向其添加新的可见项,则必须分别调用setVisible(True)
。
和qazxsw poi是关键事件的成语。
它经常被混淆。
请警告该州的event.key() == Qt.Key_F:
。列表从0开始,所以你经常遇到IndexError
。
IndexError