2016-10-25 2 views
2

저는 이미지를 표시하고 정렬하기위한 PyQt5의 매우 간단한 응용 프로그램을 만들고 있습니다. 특히 Python과 Qt를 처음 접했을 때 몇 가지 문제가있었습니다. QLabel 객체 내에 QPixmap 이미지를 표시하려고하는데 제대로 표시됩니다. 그러나, 그들은 기본적으로 연속으로 나열되어 있고 나는 그들을 이동하는 방법을 알아낼 수 없습니다.PyQt5 QWidget.setGeometry()가 QLabel에서 작동하지 않습니다.

(내가 알고있는 코드는 끔찍하지만 난 깨끗하기 전에 나는 그것이 작동 얻을 것을 시도하고있다.) 여기

내 코드입니다 :

class ImageClassifier(QtWidgets.QWidget): 

    def __init__(self): 
     super().__init__() 
     self.init_ui() 

    def init_ui(self): 

     hbox = QtWidgets.QHBoxLayout(self) 

     mainImg = QPixmap("img.png") 
     xmplImg0 = QPixmap("img0.png") 
     xmplImg1 = QPixmap("img1.png") 
     xmplImg2 = QPixmap("img2.png") 
     xmplImg3 = QPixmap("img3.png") 

     lbl = QtWidgets.QLabel(self) 
     lbl0 = QtWidgets.QLabel(self) 
     lbl1 = QtWidgets.QLabel(self) 
     lbl2 = QtWidgets.QLabel(self) 
     lbl3 = QtWidgets.QLabel(self) 

     lbl.setPixmap(mainImg) 
     lbl0.setPixmap(xmplImg0) 
     lbl1.setPixmap(xmplImg1) 
     lbl2.setPixmap(xmplImg2) 
     lbl3.setPixmap(xmplImg3) 

     hbox.addWidget(lbl) 
     hbox.addWidget(lbl0) 
     hbox.addWidget(lbl1) 
     hbox.addWidget(lbl2) 
     hbox.addWidget(lbl3) 

     lbl0.setGeometry(30, 30, 30, 30) 

     self.setLayout(hbox) 
     self.move(300, 200) 
     self.setWindowTitle('Fruit Classifier') 
     self.show() 

if __name__ == '__main__': 

    app = QtWidgets.QApplication(sys.argv) 
    ic = ImageClassifier() 
    sys.exit(app.exec_()) 

lbl0.setGeometry() 기능이 수행되지 무엇보다도 나는 단서가 없다. 누구든지 QLabel 객체의 위치를 ​​설정하는 더 좋은 방법 인이 문제를 해결할 수있는 방법을 알고 있습니까?

+0

지오메트리가 무시되도록 지오메트리를 최소 크기보다 작게 설정 한 것처럼 보입니다. – frmdstryr

+0

아 죄송합니다. 문제를 해결하기 위해 게시하기 전에 잠깐 추가했습니다. 그 라인이 없다면 여전히 효과가 없었습니다. 해당 행을 삭제하도록 수정하겠습니다. –

답변

1

다음 글 머리 기호를 따르십시오.

  • QHBoxLayout/QVBoxLayout에 무언가를 추가하면 ... 내부에 하나의 요소뿐만 아니라 BoxLayout의 도형도 설정해야합니다.
  • BoxLayout 내부에 던져 넣은 모든 것은 부모 (BoxLayout)에 맞춰 조정됩니다.
  • 모든 요소의 형상을 설정해보십시오. 당신이 필요로 여전히 모든 요소 & BoxLayout가에 대해서도 ".setFixedSize (_width, _height)"을 설정하려고 작동하지 않는 경우
  • 는 BoxLayout에서는
  • 의 형상을 설정하십시오.

[업데이트] 내가 말할 노력하고있어 봐. 예를 들어 더 나은 경우 :

BoxLayout을 사용하면 개체의 위치가 원하는대로 적용되지 않습니다. BoxLayout 정책을 따릅니다. 또한 QLabels에 대해 QWidget을 부모로 만드는 점을 (자체) 전달했습니다. 그것은 엉망입니다.

다음 코드를 확인하십시오. 나는 BoxLayout이없고 방금 누가 내 (Qlabel)의 부모인지 말했습니다. 그래서 나는 "아빠"가 말하는 것처럼 행동 할 것입니다. 이제는 함께 움직일 수 있습니다.

import sys 
from PyQt5 import QtWidgets 


class ImageClassifier(QtWidgets.QWidget): 
    def __init__(self): 
     super().__init__() 
     self.init_ui() 

    def init_ui(self): 

     self.setFixedSize(500,500) 

     lbl = QtWidgets.QLabel(self) 
     lbl.setFixedSize(50,50) 
     lbl0 = QtWidgets.QLabel(self) 
     lbl0.setFixedSize(50, 50) 
     lbl1 = QtWidgets.QLabel(self) 
     lbl1.setFixedSize(50, 50) 
     lbl2 = QtWidgets.QLabel(self) 
     lbl2.setFixedSize(50, 50) 
     lbl3 = QtWidgets.QLabel(self) 
     lbl3.setFixedSize(50, 50) 

     lbl.setStyleSheet("""background-color: red;""") 
     lbl0.setStyleSheet("""background-color: green;""") 
     lbl1.setStyleSheet("""background-color: blue;""") 
     lbl2.setStyleSheet("""background-color: yellow;""") 
     lbl3.setStyleSheet("""background-color: black;""") 

     lbl0.move(50,50) 
     lbl1.move(100, 100) 
     lbl2.move(150, 150) 
     lbl3.move(150, 150) 

     self.move(300, 200) 
     self.setWindowTitle('Fruit Classifier') 
     self.show() 


if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    ic = ImageClassifier() 
    sys.exit(app.exec_()) 

그건 간단합니다. QLabel을 상속받은 자신 만의 Label을 만드는 것이 좋습니다. 원하는대로 맞춤 설정하십시오.

+0

그냥 약간의 팁. BoxLayout에 의해 seteracing (_space )과 같은 다른 기능을 사용할 수도 있습니다. 항목 사이의 간격을 설정합니다. 또한 전체 BoxLayout의 여백을 설정하려면 setContentMargins (_left, _top, _right, _bottom)을 사용하십시오. 각 요소에 대해 여백을 설정하여 각 요소 (QLabel)에 setContentMargins를 사용하려면 ... – yurisnm

+0

대단히 감사합니다. 그러나 질문을 명확하게 설명하지는 않았습니다. 실제로 요소의 크기를 조정할 필요는 없습니다. 단지 요소를 이동해야합니다. setSpacing() 함수는 작동하지만 가로로 공백을 넣으려고하지 않고 lbl 객체 아래에서 lbl0, 1, 2, 3을 이동하려고합니다. setGeometry는 아무 것도하지 않으며, setContentMargins에 대해서도 말할 수 없다. 코드를 다운로드하여 사용해보십시오. 아마도 내가 뭔가 잘못하고있는 것 같아. 현재 코드는 https : // paste입니다.ee/p/Dc4KA –

+0

나는 당신이 내가 말하고자하는 것을 이해하지 못했다고 생각합니다. 다시 확인해주세요, 방금 업데이트했습니다 : D – yurisnm

관련 문제