不知道去什么名字 2024-02-27 21:42 采纳率: 68.8%
浏览 3
已结题

pyqt问题11111

请问我这个pyqt代码有什么问题?
我想实现点击按钮选择exe文件后在窗口内显示我的图标,可是不成功,是什么问题?


```c++
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel, QVBoxLayout, QListWidget, \
    QWidget, QListWidgetItem, QMessageBox
from PyQt5.QtGui import QIcon, QPixmap


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("选择软件示例")
        self.setGeometry(100, 100, 500, 400)

        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        self.main_layout = QVBoxLayout(self.central_widget)

        self.file_list_widget = QListWidget(self)
        self.main_layout.addWidget(self.file_list_widget)

        self.button = QPushButton("选择软件", self)
        self.button.clicked.connect(self.onButtonClick)
        self.main_layout.addWidget(self.button)


    # ...

    def onButtonClick(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        filename, _ = QFileDialog.getOpenFileName(self, "选择软件", "", "应用程序 (*.exe)", options=options)
        if filename:
            icon = QIcon.fromTheme("application-x-executable")  # 获取文件的图标
            pixmap = icon.pixmap(64, 64)  # 调整图标的大小
            item = QListWidgetItem(QIcon(pixmap), filename.split("/")[-1])  # 加载图标并添加到列表项中
            self.file_list_widget.addItem(item)

            # 创建一个 QLabel 用于显示图标
            icon_label = QLabel(self)
            icon_label.setPixmap(pixmap)
            self.main_layout.addWidget(icon_label)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())


```

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-27 21:44
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,您试图从一个 .exe 文件获取图标并将其显示在 QListWidget 中以及 QLabel 上。但是,您使用了 QIcon.fromTheme("application-x-executable") 来尝试获取文件的图标,这实际上并不会从指定的 .exe 文件路径获取图标。在 PyQt 中,要从具体的文件路径加载图标,应使用 QIcon(QFile(filename))

    请参考以下修改后的代码:

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel, QVBoxLayout, QListWidget, \
        QWidget, QListWidgetItem, QMessageBox
    from PyQt5.QtGui import QIcon, QPixmap, QFile
    
    
    class MyWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle("选择软件示例")
            self.setGeometry(100, 100, 500, 400)
    
            self.central_widget = QWidget()
            self.setCentralWidget(self.central_widget)
            self.main_layout = QVBoxLayout(self.central_widget)
    
            self.file_list_widget = QListWidget(self)
            self.main_layout.addWidget(self.file_list_widget)
    
            self.button = QPushButton("选择软件", self)
            self.button.clicked.connect(self.onButtonClick)
            self.main_layout.addWidget(self.button)
    
        def onButtonClick(self):
            options = QFileDialog.Options()
            options |= QFileDialog.DontUseNativeDialog
            filename, _ = QFileDialog.getOpenFileName(self, "选择软件", "", "应用程序 (*.exe)", options=options)
            if filename:
                # 从.exe文件路径加载图标
                icon = QIcon(QFile(filename))
                pixmap = icon.pixmap(64, 64)  # 调整图标的大小
    
                # 加载图标并添加到列表项中
                item = QListWidgetItem(QIcon(pixmap), filename.split("/")[-1])
                self.file_list_widget.addItem(item)
    
                # 创建一个 QLabel 用于显示图标
                icon_label = QLabel(self)
                icon_label.setPixmap(pixmap)
                self.main_layout.addWidget(icon_label)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())
    

    现在这段代码将会正确地从用户选择的 .exe 文件中加载图标,并在窗口内同时显示在 QListWidget 和 QLabel 上。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月27日