PYQTの可視化

11268 ワード

PYQTの例
import json
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtCore
from PyQt5.QtWidgets import *

data = [{'id':'1','pairs':'EOS','price':'18'},{'id':'2','pairs':'BTC','price':'1'},{'id':'3','pairs':'USDT','price':'333'},{'id':'4','pairs':'BSV','price':'555'},{'id':'5','pairs':'BSV','price':'555'}]
HEAD_LIST = ['id','   ', '  ', '  ','  ','  ']
COLUMN = len(HEAD_LIST)
ROW = len(data)

#           
class EmptyDelegate(QItemDelegate):
    def __init__(self, parent):
        super(EmptyDelegate, self).__init__(parent)

    def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
        return None

class TabWidget(QTabWidget,QWidget):
    def __init__(self, parent=None):
        super(TabWidget, self).__init__(parent)
        self.setWindowTitle("    ")
        self.resize(900,800)

        #            
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.addTab(self.tab1,'   1')
        self.addTab(self.tab2,'   2')
        self.tableWidget = QTableWidget()

        self.tab1UI().init_event()
        self.tab2UI(data,self.tableWidget)

#########          #################
    def tab1UI(self):
        layout = QFormLayout()

        #       [-360,360],  :    2 
        doubleValidator = QDoubleValidator(self)
        doubleValidator.setRange(-360, 360)
        doubleValidator.setNotation(QDoubleValidator.StandardNotation)
        #     ,   2 
        doubleValidator.setDecimals(2)

        #         
        reg = QRegExp('[A-Za-z0-9-_]+$')
        validator = QRegExpValidator(self)
        validator.setRegExp(reg)

        self.button = QPushButton('  ')
        self.name_label = QLabel(self.tr("    "))
        self.delegate_combobox = QComboBox()
        self.delegate_combobox.addItem(self.tr('    '))
        self.delegate_combobox.addItem(self.tr('    '))
        self.delegate_combobox.addItem(self.tr('    '))
        layout.addRow("    ", self.delegate_combobox)

        self.pair_name_edit = QLineEdit()
        layout.addRow('   ', self.pair_name_edit)
        self.pair_name_edit.setPlaceholderText('       :ETC_USDT')
        self.pair_name_edit.setValidator(validator)


        self.price_edit = QLineEdit()
        layout.addRow('  ',self.price_edit)
        self.price_edit.setPlaceholderText('      ')
        self.price_edit.setValidator(doubleValidator)
        self.quantity_edit = QLineEdit()
        layout.addRow('  ',self.quantity_edit)
        self.quantity_edit.setPlaceholderText('      ')
        self.quantity_edit.setValidator(doubleValidator)

        self.other1_edit = QLineEdit()
        layout.addRow('  1', self.other1_edit)
        self.other1_edit.setPlaceholderText('  ')

        self.other2_edit = QLineEdit()
        layout.addRow('  2', self.other2_edit)
        self.other2_edit.setPlaceholderText('  ')

        self.setTabText(0,'    ')
        self.tab1.setLayout(layout)
        layout.addWidget(self.button)
        return self

    def init_event(self):
        self.button.clicked.connect(self.get_info)

    def get_info(self):
        delegate_type = self.delegate_combobox.currentText()
        pair_name = self.pair_name_edit.text()
        price = self.price_edit.text()
        number = self.quantity_edit.text()
        other1 = self.other1_edit.text()
        other2 = self.other2_edit.text()
        if not all([delegate_type, pair_name, price,number,other1,other2]):
            QMessageBox.about(self, '  ', '        !!')
            return

        choice = QMessageBox.question(self, '', '      ?', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
        if choice == 16384 :
            self.pair_name_edit.clear()
            self.price_edit.clear()
            self.quantity_edit.clear()
            self.other1_edit.clear()
            self.other2_edit.clear()
            adjust_coefficient_dict = {"    ": delegate_type, '   ': pair_name, '  ': price, '  ': number,
                                       '  1': other1, '  2': other2}
            # with open('coefficient.txt','at',encoding='utf-8') as f:
            #     f.write(json.dumps(adjust_coefficient_dict,ensure_ascii=False)+'
') print(adjust_coefficient_dict) ######### ################### def tab2UI(self,data,tableWidget): # self.currentPage = 0 # self.totalPage = 0 # self.totalRecrodCount = 0 # self.PageRecordCount = 2 # self.createWindow(tableWidget) # , self.setTableData(tableWidget,data) # self.prevButton.clicked.connect(self.onPrevButtonClick) self.nextButton.clicked.connect(self.onNextButtonClick) self.switchPageButton.clicked.connect(self.onSwitchPageButtonClick) def createWindow(self,tableWidget): # operatorLayout = QHBoxLayout() self.prevButton = QPushButton(" ") self.nextButton = QPushButton(" ") self.switchPageButton = QPushButton("Go") self.switchPageLineEdit = QLineEdit() self.switchPageLineEdit.setFixedWidth(40) switchPage = QLabel(" ") page = QLabel(" ") operatorLayout.addWidget(self.prevButton) operatorLayout.addWidget(self.nextButton) operatorLayout.addWidget(switchPage) operatorLayout.addWidget(self.switchPageLineEdit) operatorLayout.addWidget(page) operatorLayout.addWidget(self.switchPageButton) operatorLayout.addWidget(QSplitter()) # statusLayout = QHBoxLayout() self.totalPageLabel = QLabel() self.totalPageLabel.setFixedWidth(70) self.currentPageLabel = QLabel() self.currentPageLabel.setFixedWidth(70) self.totalRecordLabel = QLabel() self.totalRecordLabel.setFixedWidth(70) statusLayout.addWidget(self.totalPageLabel) statusLayout.addWidget(self.currentPageLabel) statusLayout.addWidget(QSplitter()) statusLayout.addWidget(self.totalRecordLabel) self.setTabText(1, ' ') # , , tableWidget.setRowCount(ROW) tableWidget.setColumnCount(COLUMN) tableWidget.setHorizontalHeaderLabels(HEAD_LIST) tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) # layout = QVBoxLayout() layout.addLayout(operatorLayout) layout.addWidget(tableWidget) layout.addLayout(statusLayout) self.tab2.setLayout(layout) def setTableData(self,tableWidget,data): ''' ''' for i in range(len(data)): idItem = QTableWidgetItem(data[i]['id']) tableWidget.setItem(i, 0, idItem) textItem = QTableWidgetItem(data[i]['pairs']) tableWidget.setItem(i, 1, textItem) priceItem = QTableWidgetItem(data[i]['price']) tableWidget.setItem(i, 2, priceItem) modifyButton = QPushButton(' ') modifyButton.clicked.connect(self.modify_data) tableWidget.setCellWidget(i, 3, modifyButton) delbutton = QPushButton(' ') delbutton.clicked.connect(self.delete_data) tableWidget.setCellWidget(i, 4, delbutton) addbutton = QPushButton(' ') addbutton.clicked.connect(self.add_data) tableWidget.setCellWidget(i, 5, addbutton) # id tableWidget.setItemDelegateForColumn(0, EmptyDelegate(self)) # @QtCore.pyqtSlot() def add_data(self): # id, id_ok = QInputDialog.getInt(self, 'id ', 'id') pairs, pairs_ok = QInputDialog.getText(self, ' ', ' ') price, price_ok = QInputDialog.getDouble(self, ' ', ' ',decimals=2) # , ,id 。。。 if not all([id, id_ok, pairs,pairs_ok,price,price_ok]): return # rowPosition = self.tableWidget.rowCount() # self.tableWidget.insertRow(rowPosition) self.tableWidget.setItem(rowPosition, 0, QTableWidgetItem(str(id))) self.tableWidget.setItem(rowPosition, 1, QTableWidgetItem(pairs)) self.tableWidget.setItem(rowPosition, 2, QTableWidgetItem(str(price))) modifyButton = QPushButton(' ') modifyButton.clicked.connect(self.modify_data) self.tableWidget.setCellWidget(rowPosition, 3, modifyButton) delbutton = QPushButton(' ') delbutton.clicked.connect(self.delete_data) self.tableWidget.setCellWidget(rowPosition, 4, delbutton) addbutton = QPushButton(' ') addbutton.clicked.connect(self.add_data) self.tableWidget.setCellWidget(rowPosition, 5, addbutton) # , id, pairs, price , data add_dic = {'id': id, 'pairs': pairs, 'price': price} print(' : %s'%add_dic) # @QtCore.pyqtSlot() def modify_data(self): button = self.sender() key_list = ['id','pairs', 'price'] new_dic = {} if button: row = self.tableWidget.indexAt(button.pos()).row() id = self.tableWidget.item(row, 0).text() # for , data for column in range(len(key_list)): content = self.tableWidget.item(row, column).text() new_dic[key_list[column]] = content print(' id %s , %s'%(id,new_dic)) # id data... # @QtCore.pyqtSlot() def delete_data(self): button = self.sender() if button: row = self.tableWidget.indexAt(button.pos()).row() # , id id = self.tableWidget.item(row, 0).text() self.tableWidget.removeRow(row) print(' id %s '%id) # data id 。。。 def onPrevButtonClick(self): ''' ''' pass def onNextButtonClick(self): ''' ''' pass def onSwitchPageButtonClick(self): '''go ''' pass if __name__ == '__main__': app = QApplication(sys.argv) demo = TabWidget() demo.show() sys.exit(app.exec_())

転載先:https://www.cnblogs.com/Afrafre/p/11377241.html