在pyqt5中设置显示窗口的代码是啥?

Posted

技术标签:

【中文标题】在pyqt5中设置显示窗口的代码是啥?【英文标题】:what is the code for setting up a display window in pyqt5?在pyqt5中设置显示窗口的代码是什么? 【发布时间】:2020-04-19 21:52:16 【问题描述】:

所以我现在在 pyqt5 中编程,所以我构建了一个带有网格的小部件,我手动完成了这个,目前我正在创建一个扫雷克隆,所以我正在显示一个 10 x 10 的网格,(我我正在积极努力使其成为可能,以便用户可以分配他们想要的网格大小)所以,一切都很好,而且一切正常......除了我忘了提供一个顶部的窗口来显示里面的炸弹数量谜题。

我通过硬编码构建了我的程序,并且我没有使用“设计器”(对我来说,在程序中工作更容易,当它是我自己的时,我只是更有效地构建它,等等)。无论如何,我知道这个问题可能以前被问过,但对我来说,我有一个独特的情况。

我只需要在我的网格(游戏)上方有一个显示炸弹数量的小窗口,所以我知道 pyqt5 有快速硬编码选项,但我不知道编程小窗口的快速方法是什么。

这里是网格布局的简要介绍:

class windowm(QMainWindow):
    def __init__(self):
        super(windowm, self).__init__()
        self.check = 0


        widget = QWidget()
        self.setCentralWidget(widget)


        layout = QVBoxLayout()
        widget.setLayout(layout)


        self.puzzle = QLabel("X")
        font = QFont("Arial", 24, QFont.Bold)
        self.puzzle.setFont(font)
        self.puzzle.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
        self.puzzle.setAlignment(Qt.AlignCenter)


        self.buttons = []
        buttons = []
        used = []
        self.use = []
        self.Bombs = 0
        bombcount = 0
        bombs = 1
        bomb = "*"
        self.workfrik = []


        # grid layouts figure out what size the need to be automatically
        grid = QGridLayout()
        bombStruck = False

        menu = self.menuBar().addMenu("&Game")
        newAct = QAction("&New", self, shortcut=QKeySequence.New, triggered=self.newGame)
        menu.addAction(newAct)
        menu.addSeparator()
        quitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit, triggered=self.close)
        menu.addAction(quitAct)


        self.setWindowTitle("Minesweeper")
        self.model = HangmanModel()

        self.newGame()

        gg = []
        self.use = self.workfrik


        for i in range(100):
            button = QPushButton()

        for i in range(100):
            clicker = str(i)
            button = QPushButton(clicker)
            button.setText("*")
            self.use = self.workfrik


            blin = self.getBombs(i)
            killed = '*'    

            if blin == 0:
                button.clicked.connect(self.buttonClicked0)
            if blin == 1:
                button.clicked.connect(self.buttonClicked1)
            if blin == 2:
                button.clicked.connect(self.buttonClicked2)
            if blin == 3:
                button.clicked.connect(self.buttonClicked3)                
            if blin == 4:
                button.clicked.connect(self.buttonClicked4)
            if blin == 10:
                button.clicked.connect(self.buttonClickedkill)
            if blin == 5:
                button.clicked.connect(self.buttonClicked5)
            if blin == 6:
                button.clicked.connect(self.buttonClicked6)
            if blin == 7:
                button.clicked.connect(self.buttonClicked7)                
            if blin == 8:
                button.clicked.connect(self.buttonClicked8)


            self.buttons.append(button)
            row = i // 10 # integer division by # of columns to get the row
            col = i % 10  # remainder when divided by # of cols gives us a column
            grid.addWidget(self.buttons[i], row, col) # note we set the location

        layout.addLayout(grid)    

这就是我的程序的主要内容。我有另一门课,它可以在拼图中找到炸弹的数量,我只需要知道如何快速在我的网格上方设置一个小盒子而不把它弄乱(相信我,我试过了,但我一直弄得一团糟。)

有没有类似的短代码:QWindow("number of bombs", bombs)并让它看起来像这样:

所以我以某种方式在这个问题中包含了一张图片,所以这只是一个示例,但任何类型的仅显示数字的框都可以。

请,谢谢!非常感谢您帮助我! (对不起,我是新手,也许你们可以给一些提示或告诉我这个论坛的规则?) 有什么快速编码的方法吗?像标题代码,或者像我刚才描述的例子。非常感谢!

许多道歉我忘记包括我所有的进口!他们在这里:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from modelm import *
from random import *
import sys
import os
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtCore import QSize

那里,如果您使用它,我很确定如果您安装了 pyqt5,那么它应该可以毫无问题地启动。

【问题讨论】:

那么,您是在问是否有办法在当前网格布局之上“添加”其他小部件,对吧? 是的,我只是想在我的网格顶部使用“QLCDNumber”,这件事太愚蠢了,它不想为我工作!抱歉,我是一个 C++ 人,我最近被卷入了这个问题,所以这是不同的。 我应该首先考虑它,但我对首先构建我的程序感到厌烦。对不起。 那么,为什么不在添加网格布局之前将这些小部件添加到主 QVBoxLayout (layout)?如果它们不止一个,只需向其中添加一个 QHBoxLayout 并将这些小部件添加到该布局中。请注意,如果您想稍后添加小部件,也可以使用insertWidget(0, widget)(如果您需要插入布局,也可以使用insertLayout())。 那我该怎么做呢?所以我有一个变量,可以说名为 bomsnum,我是否必须例如#include anytihng?我可以在里面使用一个变量吗?像小部件(bombsnum,小部件)? 【参考方案1】:

在做了很多挖掘之后,我发现了这段代码为我做了这件事:

self.newGame()
self.Bombs = bombcount
bombcount = str(bombcount)
doing = 'bombs: ' + bombcount
doing = str(doing)
self.puzzle = QLabel(doing)
font = QFont("Arial", 24, QFont.Bold)
self.puzzle.setFont(font)
self.puzzle.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
self.puzzle.setAlignment(Qt.AlignCenter)
layout.addWidget(self.puzzle)

我最终使用了你所说的 Qlabel,但我不得不将doing 连接到一个字符串中,因为我的bombcount 是一个整数并且它给了我一个愚蠢的输出。

【讨论】:

以上是关于在pyqt5中设置显示窗口的代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt5 中设置 QTableWidget 的单元格样式?

如何在pyqt5中显示隐藏窗口?

PyQt5如何在一个窗口中显示不同的页面?

使用 fbs 时无法在 pyqt5 中设置图标

pyqt5 HTML窗口不显示

PyQt5Icon图标(Icon)无法显示问题