4

有时我需要使用递增的数字制作多个代码副本。在我正在编码的表单中,我需要制作超过 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)
4

1 回答 1

8

对于 QTextEdit ,该属性称为plainText

(与具有 text 属性的单行 QLineEdit 相反)

于 2013-02-21T19:41:27.483 回答