2017-09-08 2 views
1

QLabel을 HTML 하위 집합으로 QWidget에 넣으면 QLabel이 사용자 정의 위젯에 있는지 또는 기본 창이나 레이아웃에 있는지에 따라 다른 유형의 동작이 발생합니다.부분 집합 HTML QLabel, 높이 동작을 이해할 수 없다

주요 문제는 html 테이블의 모든 행이 표시되지 않는다는 것입니다. 내용은 높이가 잘게 자릅니다.

사실 나는 'height'속성이 HTML 하위 집합에서 지원되지 않는다는 것을 알게되면 인생을 훨씬 쉽게 만들어 줄 것입니다.

다음
import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import QCoreApplication, QRect, Qt 

class Labhtml(QLabel): 

    def __init__(self, parent): 
     super().__init__(parent=parent) 

     html = (''' 
      <body> 
      <table> 
      <tr> 
       <td id="header_cell" width="200"> 
        <div id="ticker"><!--INST.T--></div> 
        <div id="price"> 1000.25<!--price--></div> 
       </td> 
      </tr> 

      <tr> 
       </td> 
       <td id="values_cells"> 
        <div id="value"> +0.23%<!--value02--></div> 
        <div id="average"> 0.13%<!--range02--></div> 
       </td> 
      </tr> 
      </table> 
      </body> 
      </html> 

      ''') 

     label = QLabel(html, self) 
     self.setStyleSheet('QFrame {background-color: grey;}') 

     self.resize(100, 150) 


class Wid(QWidget): 
    def __init__(self, parent): 
     super().__init__(parent=parent) 

     self.resize(100, 450) 
     Labhtml(self) 

     layout = QVBoxLayout(self) 
     layout.setAlignment(Qt.AlignTop) 

     layout.setSpacing(0) 


class Example(QScrollArea): 
    def __init__(self): 
     super().__init__() 

     widget = QWidget() 
     layout = QVBoxLayout(widget) 
     layout.setAlignment(Qt.AlignTop) 

     Labhtml(widget) 
     layout.addWidget(Wid(widget)) 
     layout.addWidget(Labhtml(widget)) 


     self.setWidget(widget) 
     self.setWidgetResizable(True) 

     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 
+1

당신은 QTextEdit를 사용하여 시도, 나는 빌어 먹을 네,이 조언의 아주 좋은 조각 응용 프로그램 – eyllanesc

+0

@eyllanesc 더 적합하다고 생각 유무 : 희망 당신은 내가해야했던 어떤 변화가 볼 수있을 것이다 , 감사. 라벨이 – user3755529

+0

@ user3755529인데 왜 고집스럽게되었는지 알 수 없습니다. 이 질문은 아직 관련이 있습니까? 나는 당신의 예를 고칠 수 있었고 그래서 당신이 여전히 관심이 있다면 적어도 제정신이 아닌 것처럼 보입니다. – ekhumoro

답변

1

가 제대로 작동하는 것 같다 귀하의 예제의 고정 된 버전입니다 : 여기

는 코드입니다. ?

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import QCoreApplication, QRect, Qt 

class Labhtml(QLabel): 
    def __init__(self, parent): 
     super().__init__(parent=parent) 
     html = (''' 
      <body> 
      <table> 
      <tr> 
       <td id="header_cell" width="200"> 
        <div id="ticker"><!--INST.T--></div> 
        <div id="price"> 1000.25<!--price--></div> 
       </td> 
      </tr> 
      <tr> 
       <td id="values_cells"> 
        <div id="value"> +0.23%<!--value02--></div> 
        <div id="average"> 0.13%<!--range02--></div> 
       </td> 
      </tr> 
      </table> 
      </body> 
      </html> 
      ''') 
     self.setText(html) 
     self.setStyleSheet('QFrame {background-color: grey;}') 

class Wid(QWidget): 
    def __init__(self, parent=None): 
     super().__init__(parent=parent) 
     label = Labhtml(self) 
     layout = QVBoxLayout(self) 
     layout.setContentsMargins(0, 0, 0, 0) 
     layout.setAlignment(Qt.AlignTop) 
     layout.addWidget(label) 
     layout.setSpacing(0) 

class Example(QScrollArea): 
    def __init__(self): 
     super().__init__() 
     widget = QWidget() 
     layout = QVBoxLayout(widget) 
     layout.setAlignment(Qt.AlignTop) 
     layout.addWidget(Wid(widget)) 
     layout.addWidget(Labhtml(widget)) 
     self.setWidget(widget) 
     self.setWidgetResizable(True) 
     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    ex.show() 
    sys.exit(app.exec_()) 
+0

오, 이런, 정말 고마워. 고마워. – user3755529

관련 문제