Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.81 KB | None | 0 0
  1.  
  2.  
  3. MAIN.py:
  4. import sys
  5. from PyQt5 import QtWidgets,QtGui
  6. from QLogin import LoginDialog
  7. from QApp import MainWindow
  8. from QFilesTab import Files
  9. import os
  10.  
  11.  
  12. def resource_path(relative_path):
  13.     if hasattr(sys, '_MEIPASS'):
  14.         return os.path.join(sys._MEIPASS, relative_path)
  15.     return os.path.join(os.path.abspath('.'), relative_path)
  16.  
  17.  
  18. if __name__ == '__main__':
  19.  
  20.     app = QtWidgets.QApplication(sys.argv)
  21.  
  22.     login = LoginDialog()
  23.     login.setWindowIcon(QtGui.QIcon(resource_path('dc1.png')))
  24.  
  25.     if login.exec_() != QtWidgets.QDialog.Accepted:
  26.         sys.exit(-1)
  27.  
  28.     files = Files()
  29.     window = MainWindow()
  30.     window.setWindowIcon(QtGui.QIcon(resource_path('dc1.png')))
  31.     window.setGeometry(500, 150, 800, 500)
  32.     files.setCredentials(login.credentials())
  33.     window.show()
  34.     sys.exit(app.exec_())
  35.  
  36.  
  37. setCredentials z QLogin:
  38.     def credentials(self):
  39.         return self.username.text(), self.password.text()
  40.  
  41.  
  42. Główne okno z tabs:
  43. from PyQt5 import QtGui, QtWidgets
  44. from QFilesTab import Files
  45. from QWebservicesTab import Webservices
  46. import qdarkstyle
  47.  
  48.  
  49. class MainWindow(QtWidgets.QMainWindow):
  50.     def __init__(self):
  51.         super().__init__()
  52.  
  53.         self.task_bar()
  54.         self.tab_layout()
  55.         self.graph_elements()
  56.         self.center()
  57.  
  58.     def task_bar(self):
  59.         ### actions on meenubar
  60.         exitAct = QtWidgets.QAction('&Exit', self, shortcut='Ctrl+Q', statusTip='Exit application')
  61.         exitAct.triggered.connect(self.close)
  62.         moreinfo = QtWidgets.QAction('&Help', self, statusTip='More information')
  63.        # moreinfo.triggered.connect(self.information)
  64.  
  65.         ### menubar
  66.         menubar = self.menuBar()
  67.         fileMenu = menubar.addMenu('&File')
  68.         fileMenu.addAction(exitAct)
  69.         fileMenu = menubar.addMenu('&Help')
  70.         fileMenu.addAction(moreinfo)
  71.  
  72.     def graph_elements(self):
  73.         ### basic geometry and color
  74.         self.setWindowTitle('Villain')
  75.         self.setWindowIcon(QtGui.QIcon('dc1.png'))
  76.         self.setStyleSheet((qdarkstyle.load_stylesheet_pyqt5()))
  77.  
  78.     def tab_layout(self):
  79.         self.tabwidget = QtWidgets.QTabWidget()
  80.         self.tabwidget.addTab(Files(), 'Files Import')
  81.         self.tabwidget.addTab(Webservices(), 'Webservice')
  82.         self.setCentralWidget(self.tabwidget)
  83.  
  84. Files gdzie chce mieć przekazane credentiale:
  85. #!/usr/bin/env python
  86. # -*- coding: utf-8 -*-
  87.  
  88. import threading
  89. from PyQt5 import QtGui, QtWidgets, QtCore
  90. import pyodbc
  91.  
  92.  
  93.  
  94. class Files(QtWidgets.QWidget):
  95.     def __init__(self):
  96.         super().__init__()
  97.         self.layout_init()
  98.         self._credentials = ''
  99.  
  100.     def layout_init(self):
  101.         operator = ['TMobile', 'PLK', 'Play', 'Orange']
  102.         variant = ['Select variant', 'Numer usługi/polisy', 'IMEI', 'PESEL', 'NIP',
  103.                     'REGON', 'Nazwisko', 'Nazwa firmy']
  104.         ###partners
  105.         self.pvbox = QtWidgets.QVBoxLayout()
  106.         self.buttongroup = QtWidgets.QButtonGroup(self)
  107.         for elements, forms in enumerate(operator):
  108.             element = str(forms)
  109.             self.partners = QtWidgets.QRadioButton(element)
  110.             self.buttongroup.addButton(self.partners, )
  111.             self.pvbox.addWidget(self.partners,)
  112.         self.buttongroup.buttonClicked.connect(self.on_itemSelected)
  113.         self.buttongroup.buttonClicked['int'].connect(self.on_itemSelected)
  114.  
  115.  
  116.         ###variants
  117.         self.variants = QtWidgets.QComboBox()
  118.         for elements, forms in enumerate(variant):
  119.             element = str(forms)
  120.             self.variants.addItem(element)
  121.         self.variants.model().item(0).setEnabled(False)
  122.         self.variants.activated.connect(self.update_textbox)
  123.  
  124.         self.textbox = QtWidgets.QLineEdit()
  125.  
  126.         self.tablewidget = QtWidgets.QTableWidget()
  127.         self.tablewidget.setColumnCount(5)
  128.         self.tablewidget.setHorizontalHeaderLabels(['FileNameOriginal', 'OrderItemCode', 'Imported','InfoCode', 'Row'])
  129.         self.tablewidget.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
  130.         self.tablewidget.horizontalHeader().setStretchLastSection(True)
  131.         self.tablewidget.resizeColumnsToContents()
  132.         self.tablewidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
  133.         self.tablewidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
  134.  
  135.         self.pb = QtWidgets.QPushButton(self.tr('Run process'))
  136.         self.pb.setDisabled(True)
  137.         self.textbox.textChanged.connect(self.disableButton)
  138.         self.pb.clicked.connect(self.on_clicked_pb)
  139.         self.clearbutton = QtWidgets.QPushButton(self.tr('Clear all'))
  140.         self.clearbutton.setDisabled(True)
  141.         self.clearbutton.clicked.connect(self.on_clicked_clear)
  142.  
  143.         vgroupbox = QtWidgets.QGroupBox('Options')
  144.         pgroupbox = QtWidgets.QGroupBox('Partner')
  145.  
  146.         mainpanel = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight)
  147.         variantpanel = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom)
  148.         variantpanel.addWidget(self.variants)
  149.         variantpanel.addWidget(self.textbox)
  150.         variantpanel.addWidget(self.pb)
  151.         variantpanel.addWidget(self.clearbutton)
  152.         mainpanel.addWidget(pgroupbox)
  153.         mainpanel.addWidget(vgroupbox)
  154.         vgroupbox.setLayout(variantpanel)
  155.         test = QtWidgets.QVBoxLayout(self)
  156.         test.addLayout(self.pvbox)
  157.         pgroupbox.setLayout(test)
  158.  
  159.         grid = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom, self)
  160.         grid.addLayout(mainpanel)
  161.         grid.addWidget(self.tablewidget)
  162.         self.setLayout(grid)
  163.  
  164.     def setCredentials(self, credentials):
  165.         self._credentials = credentials
  166.  
  167.     def update_textbox(self, text):
  168.         self.textbox.clear()
  169.         textline = self.variants.itemText(text)
  170.         self.textbox.setPlaceholderText(textline)
  171.         if textline == 'IMEI':
  172.             regexp = QtCore.QRegExp('^(?=.{0,16}$)(0\d+|[1-9][0-9]+)$')
  173.         elif textline == 'PESEL':
  174.             regexp = QtCore.QRegExp('^(?=.{0,11}$)(0\d+|[1-9][0-9]+)$')
  175.         elif textline == 'NIP':
  176.             regexp = QtCore.QRegExp('^(?=.{0,10}$)(0\d+|[1-9][0-9]+)$')
  177.         elif textline == 'REGON':
  178.             regexp = QtCore.QRegExp('^(?=.{0,9}$)(0\d+|[1-9][0-9]+)$')
  179.         elif textline == 'Nazwisko':
  180.             regexp = QtCore.QRegExp('[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ]*')
  181.         else:
  182.             regexp = None
  183.         self.textbox.setValidator(QtGui.QRegExpValidator(regexp))
  184.  
  185.     @QtCore.pyqtSlot(QtWidgets.QAbstractButton)
  186.     @QtCore.pyqtSlot(int)
  187.     def on_itemSelected(self, index):
  188.         if isinstance(index, QtWidgets.QAbstractButton):
  189.             self.base = None
  190.             element = '{}'.format(index.text())
  191.             if element == 'Play':
  192.                 self.base = 'W2_FileImportWorkerP4'
  193.             elif element == 'TMobile':
  194.                 self.base= 'W2_FileImportWorkerTmobileFIX'
  195.             elif element == 'Orange':
  196.                 self.base = 'W2_FileImportWorkerOCP'
  197.             elif element == 'PLK':
  198.                 self.base = 'W2_FileImportWorkerPLK'
  199.             return self.base
  200.         elif isinstance(index, int):
  201.             pass
  202.  
  203.     @QtCore.pyqtSlot()
  204.     def disableButton(self):
  205.         val = bool(self.textbox.text())
  206.         self.pb.setDisabled(not val)
  207.         self.clearbutton.setDisabled(not val)
  208.  
  209.     @QtCore.pyqtSlot()
  210.     def disablesql(self):
  211.         self.textbox.setDisabled(True)
  212.         self.pb.setDisabled(True)
  213.         self.clearbutton.setDisabled(True)
  214.  
  215.     @QtCore.pyqtSlot()
  216.     def enablesql(self):
  217.         self.textbox.setDisabled(False)
  218.         self.pb.setDisabled(False)
  219.         self.clearbutton.setDisabled(False)
  220.  
  221.  
  222.     ### run process button
  223.     @QtCore.pyqtSlot()
  224.     def on_clicked_pb(self):
  225.         if self.textbox.text():
  226.             threading.Thread(target=self.sql_query, daemon=True).start()
  227.  
  228.     ### clear all
  229.     @QtCore.pyqtSlot()
  230.     def on_clicked_clear(self):
  231.         if self.textbox.text():
  232.             self.textbox.clear()
  233.         self.tablewidget.setRowCount(0)
  234.         self.tablewidget.setColumnWidth(3, 200)
  235.  
  236.     def table_performance(self):
  237.         self.tablewidget.resizeColumnsToContents()
  238.         self.tablewidget.setColumnWidth(4, 2500)
  239.         self.tablewidget.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
  240.  
  241.     @QtCore.pyqtSlot(str, str)
  242.     def show_warning(self, title, msg):
  243.         QtWidgets.QMessageBox.information(self, title, msg)
  244.  
  245.     @QtCore.pyqtSlot(str, str)
  246.     def show_ok(self, title, msg):
  247.         QtWidgets.QMessageBox.information(self, title ,msg)
  248.  
  249.     @QtCore.pyqtSlot()
  250.     def clear_items(self):
  251.         self.tablewidget.setRowCount(0)
  252.  
  253.     @QtCore.pyqtSlot(int, int, str)
  254.     def add_item(self, row, column, val):
  255.         if row >= self.tablewidget.rowCount():
  256.             self.tablewidget.insertRow(self.tablewidget.rowCount())
  257.         newitem = QtWidgets.QTableWidgetItem(val)
  258.         self.tablewidget.setItem(row, column, newitem)
  259.  
  260.     @QtCore.pyqtSlot()
  261.     def sort_items(self):
  262.         self.tablewidget.sortItems(0, order=QtCore.Qt.DescendingOrder)
  263.  
  264.     def sql_query(self):
  265.         ser = ''
  266.         username, pwd = self._credentials
  267.         imei = '%' + self.textbox.text() + '%'
  268.         self.clear_items()
  269.         try:
  270.             self.disablesql()
  271.             connection = pyodbc.connect(driver='{SQL Server}', server=ser,
  272.                                         user=username, password=pwd)
  273.             if self.base == 'W2_FileImportWorkerTmobileFIX':
  274.                 cursor = connection.cursor()
  275.                 res = cursor.execute('''
  276.                                                  ''',
  277.                                      (self.base, self.base, imei))
  278.  
  279.             elif self.base == 'All':
  280.                 cursor = connection.cursor()
  281.                 res = cursor.execute('''  ''',(imei))
  282.             else:
  283.                 cursor = connection.cursor()
  284.                 res = cursor.execute('''
  285.                                        ''', (self.base, imei))
  286.  
  287.             if not cursor.rowcount:
  288.                 QtCore.QMetaObject.invokeMethod(self, 'show_warning',
  289.                                                 QtCore.Qt.QueuedConnection,
  290.                                                 QtCore.Q_ARG(str, 'IMEI'), QtCore.Q_ARG(str, 'No items found'))
  291.             else:
  292.                 QtCore.QMetaObject.invokeMethod(self, 'clear_items', QtCore.Qt.QueuedConnection)
  293.                 QtCore.QThread.msleep(10)
  294.                 for row, form in enumerate(res):
  295.                     for column, item in enumerate(form):
  296.                         QtCore.QMetaObject.invokeMethod(self, 'add_item',
  297.                                                         QtCore.Qt.QueuedConnection,
  298.                                                         QtCore.Q_ARG(int, row), QtCore.Q_ARG(int, column),
  299.                                                         QtCore.Q_ARG(str, str(item)))
  300.                         QtCore.QThread.msleep(10)
  301.                 QtCore.QMetaObject.invokeMethod(self, 'sort_items', QtCore.Qt.QueuedConnection)
  302.                 self.table_performance()
  303.                 QtCore.QMetaObject.invokeMethod(self, 'show_ok',
  304.                                                 QtCore.Qt.QueuedConnection,
  305.                                                 QtCore.Q_ARG(str, 'Done'), QtCore.Q_ARG(str, 'Items found'))
  306.             cursor.close()
  307.  
  308.         except:
  309.                 QtCore.QMetaObject.invokeMethod(self, 'show_warning',
  310.                                                 QtCore.Qt.QueuedConnection,
  311.                                                 QtCore.Q_ARG(str, 'Error'), QtCore.Q_ARG(str, 'Something went wrong\n\n' \
  312.                                                                                               'Contact '))
  313.         self.enablesql()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement