Как установить значок для кнопки Qpushbutton в графическом интерфейсе с заполнителями в Qt Designer?

Решение:
Моя ошибка: файл, в котором добавление значка к кнопке используется с помощью функции "заполнитель" из 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

Но если я использую именно этот код в своем графическом интерфейсе, он просто не добавляет значок.

    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