Как да задам икона за Qpushbutton в GUI с контейнери в Qt Designer?

Решение:
Моя грешка: Файлът, в който се добавя иконата към бутона, се използва чрез функцията „placeholder“ от QtDesigner. Основната програма, намираща се в друга папка, търси иконата в собствената си папка, а не в папката от "импортирания" файл. Така че просто трябва да добавите пътя към иконата:

dirpath = os.path.dirname(os.path.abspath(__file__))
icon1_path = os.path.join(dirpath,"arrow_down.ico")
icon = QtGui.QPixmap(icon1_path)

Искам да създам Qpushbutton с икона вместо текст:

icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("arrow_down.png"))
self.ui.pb_down.setIcon(icon)

Но това не работи. Нито това работи:

self.ui.pb_down.setIcon(QtGui.QIcon("arrow_down.png"))

Няма съобщение за грешка, иконата просто не се появява.

Ако добавя иконата чрез Qt Designer, иконата се показва в самия Qt Desiger, но при стартиране на програмата иконата отново изчезва. Някой знае ли какво става?

Използвам python 2.7 и Windows 7

Редактиране: Използвайки код на @Chris Aung, получавам бутон с икона.

    button = QtGui.QPushButton()
    self.setCentralWidget(button)
    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap("arrow_down.ico"))
    print button.icon().isNull()  #Returns true if the icon is empty; otherwise returns false.
    #output = False

Но ако използвам точно този код в GUI, той просто не добавя иконата.

    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap("arrow_down.ico"))
    self.ui.pb_down.setIcon(icon)
    print self.ui.pb_down.icon().isNull()
    # output = True

Нямам идея къде е проблема.


person Hubschr    schedule 21.07.2014    source източник


Отговори (3)


Успях да създам QPushButton с икона без проблем с помощта на предоставения от вас код. Следва кодът, който използвах.

from PyQt4 import QtGui,QtCore
import sys

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        button = QtGui.QPushButton("TEST")
        self.setCentralWidget(button)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("add.png"))
        button.setIcon(icon)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    app.exec_()

Предлагам ви да проверите вашето png изображение отново (или да опитате с друго png изображение). Не съм напълно уверен, че ще реши проблема, но имах подобен проблем преди и използването на различно .png изображение изглежда решава проблема.

person Chris Aung    schedule 22.07.2014

Това работи за мен и се генерира автоматично от pyqt, когато конвертирате .ui файл в .py с pyuic4 инструмент.

    Icon = QtGui.QIcon()
    Icon.addPixmap(QtGui.QPixmap(_fromUtf8("SOME FILE")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
    button.setIcon(Icon)
    button.setIconSize(QtCore.QSize(width, height))

Ако използвате това, ще трябва също да дефинирате "_fromUtf8" в горната част на вашия модул като:

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s
person Luke Cauthen    schedule 21.07.2014
comment
вече го пробвах с Qtdesigner. Самият Qtdesigner показва иконата, но когато стартира програмата, няма икона. - person Hubschr; 23.07.2014

Имате ли изобразен текст на този бутон? Опитайте да си поиграете с размера на иконата setIconSize(), като за начало можете да опитате да го настроите в десния край на пикселната карта.

person Supratim    schedule 21.07.2014
comment
вече го пробвах, промяната на размера на иконата и/или бутона не помага. - person Hubschr; 23.07.2014