为什么 QWidget 上的所有按钮都不显示?

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

我是一名Python中级人员,但我错过了Python的一些基本部分。我目前正在学习 PyQt5,但还不想使用子类创建窗口。我以前尝试过 PyQt5,但从未真正理解它,并且在不了解基础知识的情况下复制和粘贴所有内容。我目前正在用 python 开发一个非常基本的文件管理器,但在显示文件夹按钮时遇到一些问题。

我会根据文件和文件夹的数量自动创建按钮(我现在正在制作所有文件夹图标)并将它们添加到 QWidget 中。这是我的代码部分,未按预期工作:

for x in files:
    folderbutton = QPushButton(w)
    folderbutton.setIcon(foldericon)
    folderbutton.setIconSize(QSize(100, 100))
    folderbutton.setGeometry(folposx, folposy, 100, 100)
    folposx += 10
    if folposx >= 1919:
        folposx = 0
        folposy += 120

for 循环遍历所有文件。

folposx
folposy
已在代码前面定义。它们都设置为零。
folderbutton
是临时定义每个
QPushButton
的内容。
foldericon
之前在代码中定义为
QIcon
。定义按钮的位置和大小后,代码将 10 添加到
folposx
,因此下一个按钮位于其旁边。如果按钮超出屏幕宽度,按钮的 Y 值会增加,按钮的 X 值会重置,为文件夹按钮创建新行。

上面是我预期会发生的事情,虽然实际结果是this

如果有人可以帮助我,我将不胜感激,如果有人需要我的完整代码,我很乐意用它编辑这个问题。

谢谢,扎扬。

编辑:下面是我的完整代码,需要所有代码来重现我的问题。

import os
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

files = os.listdir()

def window():
    global files
    app = QApplication(sys.argv)
    w = QWidget()
    w.setStyleSheet('background: black; color: white;')
    folposx = 0
    folposy = 0
    w.setGeometry(0, 0, 1919, 1079)
    foldericon = QIcon('C:/Users/HP/OneDrive/Python_Projects/aura_explorer/folder.png') 
    pixmap = foldericon.pixmap(100, 100)
    for x in files:
        folderbutton = QPushButton(w)
        folderbutton.setIcon(foldericon)
        folderbutton.setIconSize(QSize(100, 100))
        folderbutton.setGeometry(folposx, folposy, 100, 100)
        folposx += 10
        if folposx >= 1919:
            folposx = 0
            folposy += 120
            

    w.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
   window()
python pyqt5 file-manager
1个回答
0
投票

正如图拉斯评论的那样,我需要使用

layout managers
。这些允许我将按钮排列在网格中,并在调整窗口大小时调整大小。
layout managers
的文档位于 here

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