2017-09-08 3 views
1

Wenn ich ein QLabel mit HTML-Subset in einem QWidget setzen, bekomme ich unterschiedliche Art von Verhalten je nachdem, ob QLabel in einem benutzerdefinierten Widget oder im Hauptfenster oder in einem Layout ist.Wenn Subset HTML QLabel, kann ich Höhe Verhalten nicht verstehen

Das Hauptproblem ist, dass nicht alle Zeilen der HTML-Tabelle angezeigt werden. Der Inhalt wird in der Höhe gehackt.

Infact Ich finde es komisch, dass das 'Höhe' Attribut nicht in HTML-Teilmenge unterstützt wird, würde es das Leben viel einfacher machen.

hier ist der Code:

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

Haben Sie versucht, QTextEdit verwenden, ich denke, es ist besser geeignet für Ihre Anwendung – eyllanesc

+0

@eyllanesc verdammt ja, das ist ein sehr gutes Stück zu beraten? , Vielen Dank. Ich weiß nicht, warum ich auf Labels – user3755529

+0

@ user3755529 stur geworden bin. Ist diese Frage noch relevant? Ich war in der Lage, dein Beispiel zu reparieren, so dass es am wenigsten gesund aussieht, wenn du immer noch interessiert bist. – ekhumoro

Antwort

1

Im Folgenden finden Sie eine feste Version Ihres Beispiel, das richtig zu funktionieren scheint. Hoffentlich werden Sie in der Lage sein zu sehen, welche Änderungen ich machen musste:

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

oh Liebes ich war so chaotisch, danke – user3755529

Verwandte Themen