我有兩個子類。一個實現qplaintextedit,另一個qtextedit。 qtextedit被用來顯示qplaintextedit的行號。我的問題是讓這兩個人同時滾動。我試過self.viewport()。scroll(),它實際上沒有做任何事情。我試過連接qscrollbars,但是qplaintextedit的最大值比qtextedit小。我已經嘗試過我已經嘗試了其他幾種解決方案來解決行號問題,並且他們不允許您在其上使用樣式表。有沒有同時滾動的方法,或者失敗的方法是可行的線號碼?我正在使用python 2.7的pyside。這是我目前使用的代碼。Pyside同時滾動兩個qtextedits
class NumberBar(QTextEdit):
def __init__(self):
super(NumberBar,self).__init__()
self.count = 1
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.width = self.fontMetrics().width(unicode(10000))
self.setFixedWidth(self.width)
self.setStyleSheet("background:transparent;border:0px;")
self.setTextInteractionFlags(Qt.NoTextInteraction)
self.viewport().setCursor(Qt.ArrowCursor)
self.curse = QTextCursor(self.document())
self.curse.insertText(str(1))
def change(self, new):
if new > self.count:
self.curse.movePosition(self.curse.End)
self.curse.insertBlock()
self.curse.insertText(str(new+1))
self.count = new
else:
self.curse.movePosition(self.curse.End)
self.curse.select(self.curse.BlockUnderCursor)
self.curse.removeSelectedText()
self.count = new
print self.verticalScrollBar().minimum(),self.verticalScrollBar().maximum()
def onload(self, new):
while(new > self.count):
self.curse.movePosition(self.curse.End)
self.curse.insertBlock()
self.curse.insertText(str(self.count+1))
self.count += 1
def updateContents(self, rect, scroll):
if scroll:
print scroll
self.viewport().scroll(0, scroll)
self.update()
else:
self.update()
class Editor(QWidget):
def __init__(self,text = None,name=None):
super(Editor,self).__init__()
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0,0,0,0)
self.layout.setSpacing(0)
self.number_bar = NumberBar()
self.edit = TextEdit(self.number_bar,text)
highlighter = highlight.Highlighter(self.edit.document(),name)
#self.edit.blockCountChanged.connect(self.number_bar.adjustWidth)
self.edit.updateRequest.connect(self.number_bar.updateContents)
self.layout.addWidget(self.number_bar)
self.layout.addWidget(self.edit)
self.setLayout(self.layout)
class TextEdit(QPlainTextEdit):
def __init__(self,numbar,text = None):
super(TextEdit,self).__init__(text)
sheet = open("sheet.css",'r').read()
self.setStyleSheet(sheet)
self.setLineWrapMode(self.NoWrap)
self.setViewportMargins(0,0,0,0)
self.document().blockCountChanged.connect(numbar.change)
numbar.onload(0 if not text else text.count('\n'))
self.numbar = numbar
numbar.verticalScrollBar().show()
我已經試過代碼here,但不能由一個樣式表的樣式。
你能提供一些正在運行的示例代碼嗎? – 2012-08-03 03:59:10
添加了我的代碼。 – jbills 2012-08-03 04:21:30