Установить глобальную позицию для QLabel - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь отобразить QLabel (без родителя) в фиксированной позиции, используя PyQt.QLabel работает как графика, которая появляется только на мгновение, по умолчанию она появляется в середине экрана, но я не могу найти способ ее перемещения.

Любое предложение ??

обновлено:

Это мой код, может быть, проблема в том, как я это делаю:

from PyQt4.QtCore import Qt,QTimer
from PyQt4.QtGui import QLabel,QPixmap,QApplication

import os
import subprocess

class BrightnessControl(QLabel):


    def __init__(self,parent=None):

        self.__command__ = "nvclock -S%s"
        self.__imgPath__ = "../../../../ui/alfredozn_vaio/brightness/img/"
        self.__image__ = QPixmap()

        super(BrightnessControl,self).__init__(parent,Qt.SplashScreen)
        #self.loadImg(100)


    def comman(self):
        return self.__command__

    def image(self):
        return self.__image__

    def imgPath(self):
        return self.__imgPath__

    def currentValue(self):
        '''
        Obtenemos el valor actual del smartdimmer
        '''
        res=subprocess.Popen(["smartdimmer","-g"],stdout=subprocess.PIPE)
        return int(res.stdout.readline().split()[-1])

    def loadImg(self,value):
        '''
        Aquí asumimos que el único medio de control será la aplicación, por lo que los valores se moverán en múltiplos de 10 
        '''
        os.system(self.comman() % str(value))
        self.image().load("%s%i.png" % (self.imgPath(),value))
        self.setPixmap(self.image())
        self.setMask(self.image().mask())
        self.update()


if __name__ == "__main__":

    import sys

    app = QApplication(sys.argv)
    try:
        if len(sys.argv) < 2 :
            raise ValueError 
        else:
            val=10
            if sys.argv[1] == "down":
                val*=-1
            elif sys.argv[1] != "up":
                raise ValueError

            form = BrightnessControl()
            val += form.currentValue()
            val = 20 if val < 20 else 100 if val > 100 else val 
            form.loadImg(val)

            #This move function is not working
            form.move(100,100)

            form.show()
            QTimer.singleShot(3000,app.quit)
            app.exec_()
    except ValueError:
        print "Modo de uso: SonyBrightnessControl [up|down]"

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Вы можете использовать свойство pos или переместить его, вызвав move () в метке.Но это не всегда хорошо работает.Лучший способ из моего опыта - использовать функцию label.setGeometry ().

Если вы хотите, чтобы это было в середине экрана, код должен быть таким (это код на C ++, я не знаю, Python, извините):

label.setGeometry((this->width() - label.sizeHint().width()) / 2), (this->height() - label.sizeHint().height()) / 2, label.sizeHint().width(), label.sizeHint().height());

Если вы сделаете это в resizeEvent родительского объекта, оно будет всегда в центре.

Вы также можете оптимизировать код, сохраняя sizeHint в переменной, чтобы непозвоните несколько раз.

0 голосов
/ 11 июня 2010

Используйте его pos свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...