【问题标题】:AttributeError: 'QTextEdit' object has no attribute 'text'AttributeError:“QTextEdit”对象没有属性“文本”
【发布时间】:2013-02-21 19:37:16
【问题描述】:

有时我需要制作多个带有递增数字的代码副本。 在我编写的表单中,我需要制作超过 12 个复选框,每个复选框都需要以下代码:

    self.checkBox1 = QtGui.QCheckBox()
    self.checkBox1.setGeometry(QtCore.QRect(20, 20, 70, 17))
    self.checkBox1.setObjectName(_fromUtf8("checkBox1"))

下面的脚本使我能够避免手动更改每个复选框的数字的无聊任务。 我只是将上面的 3 行复制到 windows 剪贴板中,然后... 我在表单的第一个字段中插入“checkBox”,在第二个字段中插入“1”,在第三个字段中插入 12。 当我点击“确定”按钮时,3 行的 12 个按顺序编号的副本出现在表单的第 4 个字段中。 我希望这对其他人提供一些帮助。 马克

这是我的代码:

    # -*- coding: latin-1 -*-
"""
duplicate_text_with_incrementing_nos_for_programming_and_paste_to_clipboard.py
Harvest text from clipboard and run functions below, and then paste back to clipboard

"""

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtCore import (Qt, SIGNAL)
from PyQt4.QtGui import (QApplication, QDialog, QHBoxLayout, QLabel,
        QPushButton)


class Form(QDialog):

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

        self.initUI()

    def initUI(self):
        okButton01 = QtGui.QPushButton("OK")
        cancelButton01 = QtGui.QPushButton("Cancel")
        okButton01.clicked.connect(self.fn_okButton01_clicked)
        cancelButton01.clicked.connect(QtCore.QCoreApplication.instance().quit)
        self.cancelButton01 = cancelButton01

        prefix_label = QtGui.QLabel('Prefix')
        digit_label = QtGui.QLabel('Digit')
        iterations_label = QtGui.QLabel('Iterations')
        clip_label = QtGui.QLabel('Clip')

        prefixEdit = QtGui.QLineEdit()
        digitEdit = QtGui.QLineEdit()
        iterationsEdit = QtGui.QLineEdit()
        reviewEdit = QtGui.QTextEdit()

        self.prefix_label = prefix_label
        self.digit_label = digit_label
        self.iterations_label = iterations_label
        self.clip_label = clip_label

        self.prefixEdit = prefixEdit
        self.digitEdit = digitEdit
        self.iterationsEdit = iterationsEdit
        self.reviewEdit = reviewEdit

        hbox01 = QtGui.QHBoxLayout()
        hbox01.addWidget(prefix_label)
        hbox01.addWidget(prefixEdit)

        hbox01.addWidget(digit_label)
        hbox01.addWidget(digitEdit)
        hbox01.addWidget(iterations_label)
        hbox01.addWidget(iterationsEdit)

        hbox03 = QtGui.QHBoxLayout()
        hbox03.addWidget(clip_label)
        hbox03.addWidget(reviewEdit)

        self.reviewEdit.setText(fn_getText())

        hbox00 = QtGui.QHBoxLayout()
        hbox00.addStretch(1)
        hbox00.addWidget(okButton01)
        hbox00.addWidget(cancelButton01)

        vbox0 = QtGui.QVBoxLayout()
        vbox0.addLayout(hbox01)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox03)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox00)

        self.setLayout(vbox0)

        self.setGeometry(300, 300, 600, 300) #class PySide.QtCore.QRectF(left, top, width, height)   http://srinikom.github.com/pyside-docs/PySide/QtCore/QRectF.html#PySide.QtCore.QRectF
        self.setWindowTitle('Duplicate Code Strings W/Increasing Numbers')  
        self.show()

    def fn_okButton01_clicked(self):
        prefixEditText = str(self.prefixEdit.text())
        digitEditText = str(self.digitEdit.text())
        iterationsEditText = str(self.iterationsEdit.text())

        nutext = prefixEditText + ' ' + digitEditText + ' ' + iterationsEditText 
        print 'Line 89: nutext = ' + str(nutext)
        original_clip = self.reviewEdit.toPlainText() # PySide.QtGui.QLineEdit.text(),  http://srinikom.github.com/pyside-docs/PySide/QtGui/QLineEdit.html

        txt2paste2clipbd = fn_duplicate_code_with_increments(texte=str(original_clip), no_of_copies=str(iterationsEditText), string_b4_digits=str(prefixEditText), digits=str(digitEditText))

        self.reviewEdit.setPlainText(txt2paste2clipbd)

        setWinClipText(txt2paste2clipbd)

        #self.deleteLater()
        #event.accept() #http://www.qtcentre.org/threads/20895-PyQt4-Want-to-connect-a-window-s-close-button
        #self.destroy()



def formm():
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    app.exec_()


def fn_getText(): 
    # get text from clipboard
    win32clipboard.OpenClipboard()
    text = win32clipboard.GetClipboardData(win32clipboard.CF_TEXT)
    win32clipboard.CloseClipboard()
    return text


def setWinClipText(aString):
    # Send text to clipboard
    import win32clipboard
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(aString)
    win32clipboard.CloseClipboard()


def fn_duplicate_code_with_increments(texte, no_of_copies, string_b4_digits, digits):
    """
    to do: combine args 2 and 3, and use re module to determine with chars are the digits to increment
    """
    import re
    import string
    i = 0
    tempclipDup = texte[:]
    temp_instance = ''
    accumulator = ''
    while i <= int(no_of_copies) - 1:
        i +=1
        orig_str = string_b4_digits + str(digits)
        replact_st = string_b4_digits + str(i)
        temp_instance = tempclipDup.replace(orig_str, replact_st)
        if len(accumulator) > 2:
            accumulator = accumulator + '\n' + temp_instance
        else:
            accumulator = temp_instance

    return accumulator



if 1 == 1:
    import os
    import sys
    import subprocess
    import win32clipboard
    import win32con

    fn_operation_log = ''
    arg_sent_2this_script = ''
    alternative = 1
    if alternative == 1:
        formm()
    elif alternative == 2:
        txt2paste2clipbd = fn_duplicate_code_with_increments(texte=fn_getText(), no_of_copies=3, string_b4_digits='hbox', digits=1)
        setWinClipText(txt2paste2clipbd)

【问题讨论】:

    标签: qt python-2.7 pyside qlineedit


    【解决方案1】:

    对于 QTextEdit,该属性称为 plainText

    (与单行QLineEdit相反,它有一个text属性)

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 1970-01-01
      • 2018-11-12
      • 2021-06-05
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多