class Spliter(QWidget): def __init__(self, parent=None): super(Spliter, self).__init__(parent) self.splayout = QSplitter(self) self.splayout.setGeometry(QtCore.QRect(70, 10, 256, 576)) self.splayout.setOrientation(QtCore.Qt.Vertical) self.table1 = DetailFirstrowdata(self.splayout) self.table2 = DetailSecondrowdata(self.splayout) self.table3 = DetailThirdrowdata(self.splayout) self.gridLayout = QtWidgets.QGridLayout(self) self.gridLayout.addWidget(self.splayout) self.table1.firstrow.cellClicked['int', 'int'].connect( self.getindex) # 点击事件,更新第二栏 self.table1.firstrow.cellClicked['int', 'int'].connect( self.getindexnew) # 点击事件,更新第三栏 # 鼠标点击后 设置第二行,第三行的数据 def getindexnew(self): row = self.table1.firstrow.currentRow() strindex = self.table1.firstrow.item(row, 0).text() # 取 所点击行的第一个数据, index = int(strindex) self.table3.dynamicsetval(index) def getindex(self): row = self.table1.firstrow.currentRow() strindex = self.table1.firstrow.item(row, 0).text() index = int(strindex) self.table2.dynamicsetval(index)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(400, 300) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QLabel(self.centralwidget) self.label.setGeometry(QRect(100, 10, 200, 31)) font = QFont() font.setFamily("Georgia") font.setPointSize(16) self.label.setFont(font) self.label.setAlignment(Qt.AlignCenter) self.label.setObjectName("label") self.splitter = QSplitter(self.centralwidget) self.splitter.setGeometry(QRect(20, 70, 351, 151)) self.splitter.setOrientation(Qt.Vertical) self.splitter.setObjectName("splitter") self.label_2 = QLabel(self.splitter) font = QFont() font.setFamily("Georgia") font.setPointSize(12) self.label_2.setFont(font) self.label_2.setAlignment(Qt.AlignCenter) self.label_2.setWordWrap(True) self.label_2.setObjectName("label_22") self.label_3 = QLabel(self.splitter) font = QFont() font.setFamily("Georgia") font.setPointSize(12) self.label_3.setFont(font) self.label_3.setAlignment(Qt.AlignCenter) self.label_3.setWordWrap(True) self.label_3.setObjectName("label_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setGeometry(QRect(0, 0, 400, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Новая вкладка")) self.label.setText(_translate("MainWindow", "Добро Пожаловать")) self.label_2.setText(_translate("MainWindow", "Чтобы начать нажмите PgUp.")) self.label_3.setText(_translate("MainWindow", "Чтобы завершить нажмите PgUp и подождите."))
class MyCodeEditor(QWidget): def __init__(self,parent=None): QWidget.__init__(self,parent) self.__editorSettings = EditorSettings() self.__textDocument = PythonTextDocument() self.__splitter = QSplitter(self) # 横纵滚动条 self.__verticalScrollBar = QScrollBar(self) self.__verticalScrollBar.adjustSize() self.__verticalScrollBar.setMinimumWidth(self.__verticalScrollBar.width()) self.__verticalScrollBar.setMaximumWidth(self.__verticalScrollBar.width()) self.__verticalScrollBar.valueChanged.connect(self.__onVScrollValueChanged) self.__editorSettings.startDisLineNumberChangedSignal.connect(self.__verticalScrollBar.setValue) self.__horizontalScrollBar = QScrollBar(QtCore.Qt.Horizontal,self) self.__horizontalScrollBar.adjustSize() self.__horizontalScrollBar.setMinimumHeight(self.__horizontalScrollBar.height()) self.__horizontalScrollBar.setMaximumHeight(self.__horizontalScrollBar.height()) self.__horizontalScrollBar.valueChanged.connect(self.__onHScrollValueChanged) self.__editorSettings.startDisLetterXOffChangedSignal.connect(self.__horizontalScrollBar.setValue) self.__lineNumberWidget = LineNumberWidget(self.__editorSettings,self.__splitter) setattr(self.__lineNumberWidget,'resizeEvent',self.__onLineNumberWidgetSizeChanged) self.__codeTextWidget = CodeTextWidget(self.__textDocument,self.__editorSettings,self.__splitter) self.__codeTextWidget.document().totalLevelTextChangedSignal.connect(self.__onCodeTextChanged) self.__codeTextWidget.settings().lineTextMaxPixelChangedSignal.connect(self.__onLineStrLengthChanged) self.__codeTextWidget.visibleLineYOffInfoChangedSignal.connect( self.__lineNumberWidget.setVisibleLineYOffInfoArray ) self.__splitter.addWidget( self.__lineNumberWidget ) self.__splitter.addWidget( self.__codeTextWidget ) self.__splitter.setCollapsible( 0,False ) self.__splitter.setCollapsible( 1,False ) self.setText = self.__codeTextWidget.setText self.getText = self.__codeTextWidget.getText def __onLineStrLengthChanged(self,newMaxLength): hMax = newMaxLength-1 self.__horizontalScrollBar.setRange(0,hMax) if self.__horizontalScrollBar.value() > hMax: self.__horizontalScrollBar.setValue(hMax) def __onCodeTextChanged(self,*arg1,**arg2): vMax = self.__codeTextWidget.document().getLineCount()-1 self.__verticalScrollBar.setRange(0,vMax) if self.__verticalScrollBar.value() > vMax: self.__verticalScrollBar.setValue(vMax) def __onVScrollValueChanged(self): self.__codeTextWidget.showLineNumberAsTop(self.__verticalScrollBar.value()) def __onHScrollValueChanged(self): self.__codeTextWidget.showLeftXOffAsLeft(self.__horizontalScrollBar.value()) def __onLineNumberWidgetSizeChanged(self,*arg1,**arg2): lineNumberWidgetWidth = self.__lineNumberWidget.width() vScrollBarWidth = self.__verticalScrollBar.width() hScrollBarHeight = self.__horizontalScrollBar.height() self.__horizontalScrollBar.setGeometry(lineNumberWidgetWidth,self.height()-hScrollBarHeight, \ self.width()-vScrollBarWidth-lineNumberWidgetWidth,hScrollBarHeight) def resizeEvent(self, event): vScrollBarWidth = self.__verticalScrollBar.width() hScrollBarHeight = self.__horizontalScrollBar.height() self.__splitter.setGeometry( 0,0,self.width()-vScrollBarWidth,self.height()-hScrollBarHeight ) self.__verticalScrollBar.setGeometry(self.width()-vScrollBarWidth,0,vScrollBarWidth,self.height()-hScrollBarHeight) self.__onLineNumberWidgetSizeChanged() def wheelEvent(self, event): changedV = 3 if event.angleDelta().y() < 0 else -3 self.__verticalScrollBar.setValue( self.__verticalScrollBar.value() + changedV )