我正在尝试使用PyQt在固定位置显示QLabel(没有父级)。 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]"
答案 0 :(得分:1)
您可以使用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保存到变量中,不要多次调用它。
答案 1 :(得分:0)
使用其pos
属性。