函数调用仅在构造函数中起作用,否则函数会生成一个不可见的标签

问题描述 投票:0回答:1

我用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_()
pyqt qwidget qlabel qpixmap
1个回答
0
投票

请试试这段代码。

说明

有一些观点可以说,但主要问题是为什么新标签不显示?

在python中,有PyQtPySide。我们提前准备小部件,并将它们设置为主要小部件,并在最后一次显示它们。

如果要向其添加新的可见项,则必须分别调用setVisible(True)

和qazxsw poi是关键事件的成语。

它经常被混淆。

请警告该州的event.key() == Qt.Key_F:。列表从0开始,所以你经常遇到IndexError

IndexError
© www.soinside.com 2019 - 2024. All rights reserved.