2013-05-16 5 views
0

Я пытаюсь создать графический интерфейс с PyQt4, изначально я использовал конструктор QT, чтобы выполнить мой общий макет, а затем модифицировать код. Я заметил, что существует много повторяющегося кода, который будет заменен на увядание класса или метода, но я не уверен, что было бы лучше или как правильно реализовать любой путь должным образом. вот пример повторяющегося кода (его очень большая программа)Устранение повторяющегося кода в python

self.ch2_R = QtGui.QLineEdit(Form) 
self.ch2_R.setSizePolicy(sizePolicy) 
self.ch2_R.setText(_fromUtf8("")) 
self.ch2_R.setFrame(True) 
self.ch2_R.setAlignment(QtCore.Qt.AlignCenter) 
self.ch2_R.setReadOnly(True) 
self.ch2_R.setObjectName(_fromUtf8("ch2_R")) 
print self.ch2_R 

self.ch3_R = QtGui.QLineEdit(Form) 
self.ch3_R.setSizePolicy(sizePolicy) 
self.ch3_R.setText(_fromUtf8("")) 
self.ch3_R.setFrame(True) 
self.ch3_R.setAlignment(QtCore.Qt.AlignCenter) 
self.ch3_R.setReadOnly(True) 
self.ch3_R.setObjectName(_fromUtf8("ch3_R")) 

self.ch4_R = QtGui.QLineEdit(Form) 
self.ch4_R.setSizePolicy(sizePolicy) 
self.ch4_R.setText(_fromUtf8("")) 
self.ch4_R.setFrame(True) 
self.ch4_R.setAlignment(QtCore.Qt.AlignCenter) 
self.ch4_R.setReadOnly(True) 
self.ch4_R.setObjectName(_fromUtf8("ch4_R")) 

sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) 
sizePolicy.setHorizontalStretch(0) 
sizePolicy.setVerticalStretch(0) 
sizePolicy.setHeightForWidth(self.ch2_R.sizePolicy().hasHeightForWidth()) 

sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) 
sizePolicy.setHorizontalStretch(0) 
sizePolicy.setVerticalStretch(0) 
sizePolicy.setHeightForWidth(self.ch3_R.sizePolicy().hasHeightForWidth()) 

sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) 
sizePolicy.setHorizontalStretch(0) 
sizePolicy.setVerticalStretch(0) 
sizePolicy.setHeightForWidth(self.ch4_R.sizePolicy().hasHeightForWidth()) 

self.gridLayout.addWidget(self.ch2_R, 4, 5, 1, 4) 
self.gridLayout.addWidget(self.ch3_R, 5, 5, 1, 4) 
self.gridLayout.addWidget(self.ch4_R, 6, 5, 1, 4) 

этот код все в пределах

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Form(object): 
     def setupUi(self, Form): 

Моя intial попытка была creaet метод внутри класса Ui_Form как этот

def myQtlineEdit(self, name, form, sizePolicy): 
     self.name = QtGui.QLineEdit(Form) 
     self.name.setSizePolicy(sizePolicy) 
     self.name.setText(_fromUtf8("")) 
     self.name.setFrame(True) 
     self.name.setAlignment(QtCore.Qt.AlignCenter) 
     self.name.setReadOnly(True) 
     self.name.setObjectName(_fromUtf8("%s" %name)) 

     sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) 
     sizePolicy.setHorizontalStretch(0) 
     sizePolicy.setVerticalStretch(0) 
     sizePolicy.setHeightForWidth(self.name.sizePolicy().hasHeightForWidth()) 

self myQtlineEdit("ch2_R", form, sizePolicy) 

Он сделал создать текстовое поле, я искал, но

self.gridLayout.addWidget(self.ch2_R, 4, 5, 1, 4) 

дал бы мне ошибку, говоря, что ch2_R did not exsist

Спасибо.

ответ

1

Вместо создания атрибута с именем ch2_R вы всегда назначая приписывать self.name, вы должны вместо этого

def myQtlineEdit(self, name, form, sizePolicy): 
    widget = QtGui.QLineEdit(Form) 
    widget.setSizePolicy(sizePolicy) 
    widget.setText(_fromUtf8("")) 
    widget.setFrame(True) 
    widget.setAlignment(QtCore.Qt.AlignCenter) 
    widget.setReadOnly(True) 
    widget.setObjectName(_fromUtf8("%s" %name)) 

    setattr(self, name, widget) 

    sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) 
    sizePolicy.setHorizontalStretch(0) 
    sizePolicy.setVerticalStretch(0) 
    sizePolicy.setHeightForWidth(widget.sizePolicy().hasHeightForWidth()) 
+0

Nice, спасибо большое! – Lpaulson

Смежные вопросы