PyQt를 사용하여 고정 위치에 QLabel (부모 없음)을 표시하려고합니다. 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]"
form.show() 직전에 형상 : form.setGeometry (10,10,200,50)을 설정했지만 작동하지 않으면 라벨이 화면 중간에 다시 나타납니다. 어쩌면 문제는 최상위 위젯이 레이블이고 부모가 없다는 것입니다. 하지만 어떻게 해결해야할지 모르겠다. – alfredozn
나는 본다. 문제는 그것입니다. 최상위 위젯이 없다는 것은 Qt가 양식의 최상위 레벨이 될 창을 자동으로 작성한다는 의미입니다. 해결 방법은 투명한 QDialog를 최상위 창으로 사용하는 것입니다. 대화 상자를 표시하면 화면의 원하는 위치로 이동할 수 있습니다. QDesktopServices를 사용하여 화면 분석을 알 수 있습니다. 희망이 당신의 문제에 도움이됩니다. – cnebrera
고맙습니다. 귀하의 제안을 따르고 __main__에서 Qdialog를 생성하고이를 사용자 정의 QLabel에 추가 할 때 작동했습니다. 그런 다음 Qdialog에 대한 사용자 정의 위젯의 유형을 바꾸려고 시도했지만 문제는 다시 발생합니다. 그래서이 문제를 보니 문제가이 줄에 있다는 것을 알았습니다 : super (BrightnessControl, self) .__ init __ (parent, Qt.SplashScreen) 부모가 없기 때문에 아무 것도 .... 그래서 나는 바꿨고 이제는 내 위젯을 옮길 수 있습니다. 비록 그것이 Qlabel 일지라도. – alfredozn