QLineEdit没有显示文字

时间:2017-01-14 00:38:35

标签: python pyqt4

我正在创建一个测试python代码的应用程序。 在我的窗口中,我有两个QLineEdit一个用于评论计数,另一个用于行计数。

这两个QLineEdit应该显示我从窗口打开文件后的注释数和行数

我尝试使用QLineEdit.setText()但仍未显示,但是当我在QLineEdit中使用QLineEdit.Text()打印文本时,它会返回正确的值(即使它在内部不可见) QLineEdit)。

到目前为止,这是我的代码:

      def home(self)

       self.nbcom = QtGui.QLineEdit(self)
       self.validator = QtGui.QIntValidator()
       self.nbcom.setValidator(self.validator)
       self.nbcom.setMaxLength(5)
       #self.nbcom.setReadOnly(True)
       self.nblines = QtGui.QLineEdit(self)
       self.nbcom.setValidator(self.validator)
       self.nblines.setMaxLength(5)

    def change_state(self):

      print(self.nbcom.text())
      print(self.nblines.text())

    def File_Open(self):
      self.numl = 0
      self.commentCount = 0;
      self.name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
      self.home()

      with open(self.name, 'r') as file:
        print("file name :", self.name)
        for eachLine in file:  # loops the lines in the file object ans sets     the pointer to the end of the file
            if eachLine.strip():  # check if the line is a blank line
                self.numl += 1
            if eachLine.find('#') != -1:  # looks to find the comment tag
                self.commentCount += 1
        print("number of comments %i" % self.commentCount)
        print("num lines %i: "% self.numl)
        self.nbcom.setText(str(self.commentCount))
        self.nblines.setText(str(self.numl))

1 个答案:

答案 0 :(得分:0)

对不起,我有PyQt5,我只是在构造函数中重新安排了对self.home()方法的调用。 并通过将self.nbcom.setValidator(self.validator)更改为self.nblines.setValidator(self.validator)来解决一个错字。 一切正常。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
#from PyQt4.QtCore import *
#from PyQt4.QtGui import *

class Example(QWidget):

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

        self.home()                                           # +++

        layout = QVBoxLayout(self)
        layout.addWidget(self.nbcom)
        layout.addWidget(self.nblines)
        self.btn = QPushButton("Button change_state")
        self.btn.clicked.connect(self.change_state)
        layout.addWidget(self.btn)
        self.btn2 = QPushButton("File_Open")
        self.btn2.clicked.connect(self.File_Open)
        layout.addWidget(self.btn2)        


    def home(self):
        self.nbcom     = QLineEdit(self)
        self.validator = QIntValidator()
        self.nbcom.setValidator(self.validator)
        self.nbcom.setMaxLength(5)

        #self.nbcom.setReadOnly(True)
        self.nblines = QLineEdit(self)
        self.nblines.setValidator(self.validator)                 # nblines <- nbcom !!!
        self.nblines.setMaxLength(5)

    def change_state(self):
        print(self.nbcom.text())
        print(self.nblines.text())

    def File_Open(self):
        self.numl = 0
        self.commentCount = 0;

#        self.name = QFileDialog.getOpenFileName(self, 'Open File')    # for PyQt4
        self.name, _ = QFileDialog.getOpenFileName(self, 'Open File')  # for PyQt5

#        self.home()                                                   # ---

        with open(self.name, 'r') as file:
            print("file name :", self.name)
            for eachLine in file:        # loops the lines in the file object ans sets     the pointer to the end of the file
                if eachLine.strip():     # check if the line is a blank line
                    self.numl += 1
                if eachLine.find('#') != -1:  # looks to find the comment tag
                    self.commentCount += 1
            print("number of comments %i" % self.commentCount)
            print("num lines %i: "% self.numl)
            self.nbcom.setText(str(self.commentCount))
            self.nblines.setText(str(self.numl))

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = Example()
    w.setWindowTitle('qradiobutton-in-qtablewidget')
    w.setWindowIcon(QIcon('im.png'))
    w.resize(400, 150)
    w.show()
    sys.exit(app.exec())

enter image description here