Пожалуйста, попробуйте этот код.
Объяснение
Есть несколько моментов, которые нужно сказать, но главная проблема в том, почему новые ярлыки не появляются?
В питоне, с PyQt
и PySide
.Мы заранее подготавливаем виджеты, устанавливаем их в основной виджет и показываем их все в последний раз.
Если вы хотите добавить в него новый видимый элемент, вы должны четко вызвать setVisible(True)
соответственно.
и event.key() == Qt.Key_F:
- это идиома ключевых событий.
Это часто путают.
И, пожалуйста, предупредите IndexError
о состоянии.список начинается с 0, поэтому вы часто встречаете IndexError
.
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import random
spielfeldgröße = 16
size = 30#10 pixel
class GameWindow(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(500,500,500,500)
self.state = [[0 for y in range(spielfeldgröße)] for x in range(spielfeldgröße)]
self.spawnFruit() #spawns a fruit
def spawnFruit(self):
fruitpixmap = QPixmap(size,size)
fruitpixmap.fill(Qt.red)
#find available spots to spawn fruits on the map
available = list()
for x in range(spielfeldgröße-1):
for y in range(spielfeldgröße-1):
if self.state[x][y] == 0:
available.append((x,y))
lenght = len(available)
rand = random.randint(0, lenght - 1)
x,y = available[rand]
print("fruit at:", x, ":", y)
#spawn
label = QLabel(self)
label.setPixmap(fruitpixmap)
label.move(x*size, y*size)
label.setVisible(True)
def keyPressEvent(self, event):
if(event.key() == Qt.Key_F):
self.spawnFruit() #doesn't spawns a fruit
else:
super().keyPressEvent(event)
app = QApplication(sys.argv)
win = GameWindow()
win.show()
sys.exit(app.exec_())