Advertisement
Guest User

GUI

a guest
May 22nd, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.10 KB | None | 0 0
  1. from PyQt5.Qt import QStyle, QStyleFactory
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. from PyQt5.Qt import *
  4. import pymysql.cursors
  5. import ctypes
  6. import datareader
  7. import sys
  8.  
  9. cnx = pymysql.connect(user='root',
  10.                       password='1234',
  11.                       host='localhost',
  12.                       database='normal_db')
  13. cursor = cnx.cursor()
  14.  
  15.  
  16. # Connector til Normal database
  17. class Ui_Admin(object):
  18.  
  19.     # Konstruktor: Indlæser data fra JSON + Rossmann database
  20.     def __init__(self):
  21.         super().__init__()
  22.         datareader.write_to_db()
  23.         self.wallpaper()
  24.  
  25.     def add_store(self):
  26.  
  27.         chain = self.lineEdit.text()
  28.         address = self.lineEdit_2.text()
  29.         zip_code = self.lineEdit_3.text()
  30.         city = self.lineEdit_4.text()
  31.         # Henter inputs fra GUIen
  32.  
  33.         if not chain:
  34.             ctypes.windll.user32.MessageBoxW(0, "Mangler kæde", "Error", 0)  # Virker kun på Windows
  35.  
  36.         elif not address:
  37.             ctypes.windll.user32.MessageBoxW(0, "Mangler adresse", "Error", 0)  # Virker kun på Windows
  38.  
  39.         elif not zip_code:
  40.             ctypes.windll.user32.MessageBoxW(0, "Mangler postnummer", "Error", 0)  # Virker kun på Windows
  41.  
  42.         elif not city:
  43.             ctypes.windll.user32.MessageBoxW(0, "Mangler by", "Error", 0)  # Virker kun på Windows
  44.         # Tjekker om der mangler et felt
  45.  
  46.         else:
  47.             keys = ('SET FOREIGN_KEY_CHECKS = 0')
  48.             cursor.execute(keys)  # Fjerner foerign key checks, elimenere eventuelle INSERT problemer.
  49.  
  50.             sel_address = ('SELECT address from stores where address = %s')
  51.             cursor.execute(sel_address, (address))  # Tjekker om adressen allerede eksisterer i databasen.
  52.             sql_address = cursor.fetchone()
  53.  
  54.             try:
  55.                 insert_city = ('INSERT INTO city VALUES (%s, %s) ON DUPLICATE KEY UPDATE zip_code = zip_code')
  56.                 cursor.execute(insert_city, (zip_code, city))  # Indsætter zip_code og city i tabellen city.
  57.                 cnx.commit()
  58.             except:
  59.                 error = ctypes.windll.user32.MessageBoxW(0, "Postnummer skal være tal", "Error",
  60.                                                          0)  # Virker kun på Windows
  61.                 return error  # Returnerer fejl hvis zip_code ikke er int. Dataen i den column skal være INT i mysql og giver derfor fejl
  62.  
  63.             try:
  64.                 insert_chain = ('INSERT INTO chain(name) VALUES(%s) ON DUPLICATE KEY UPDATE name=name')
  65.                 if sql_address:  # Sørger for, at chain ikke bliver indsat, selvom adresse er duplikat
  66.                     return self.clear()
  67.                 else:
  68.                     cursor.execute(insert_chain, (chain))  # Indsætter chain, chain_id er auto_incrementet
  69.                     cnx.commit()
  70.             except:
  71.                 error1 = ctypes.windll.user32.MessageBoxW(0, "Fejl i tilføjelse af kæde", "Error",
  72.                                                           0)  # Virker kun på Windows
  73.                 return error1  # Returnerer fejl, hvis det ikke lykkes. Fungere som en catchall.
  74.  
  75.             try:
  76.                 sel_chain = ('SELECT chain_id from chain where name = %s')
  77.                 cursor.execute(sel_chain, (chain))  # Henter chain_id for den relevante kæde.
  78.                 new_chain_id = cursor.fetchall()
  79.             except:
  80.                 error2 = ctypes.windll.user32.MessageBoxW(0, "SQL fejl", "Error", 0)  # Virker kun på Windows
  81.                 return error2  # Giver fejl hvis det ikke lykkes, burde aldrig ske.
  82.  
  83.             if sql_address:
  84.                 ctypes.windll.user32.MessageBoxW(0, "Fejl i tilføjelse", "Error", 0)  # Virker kun på Windows
  85.                 # Hvis sql_adress ikke er None, må adresse allerede findes i databasen og der retuneres derfor en fejl.
  86.                 return self.clear()
  87.             else:
  88.                 insert = (
  89.                     'INSERT INTO stores (chain_id, address, zip_code) VALUES (%s, %s, %s)')
  90.                 cursor.execute(insert, (new_chain_id, address, zip_code))
  91.                 cnx.commit()  # Sætter den sidste data ind i store.
  92.                 ctypes.windll.user32.MessageBoxW(0, "Data tilføjet", "Succes", 0)  # Virker kun på Windows
  93.                 self.clear()
  94.  
  95.     def help_button(self):
  96.         ctypes.windll.user32.MessageBoxW(0, """Indtast informationerne i den relevante rubrik, fx Normal til højre for kæde.\n
  97.        For mere information kontakt it-support""", "Hjælp", 0)
  98.         # Knap med system hjælp, virker kun på windows.
  99.  
  100.     def clear(self):
  101.         self.lineEdit.clear()
  102.         self.lineEdit_2.clear()
  103.         self.lineEdit_3.clear()
  104.         self.lineEdit_4.clear()
  105.         # Nulstiller felterne i GUI'en
  106.  
  107.     def setupUi(self, Form):
  108.         Form.setFixedSize(319, 300)  # Sætter størrelsen på GUI'en, fixedsized gør så man ikke kan trække den større.
  109.  
  110.         self.verticalLayout = QtWidgets.QVBoxLayout(Form)  # Vertikalt layout sætter alt op vertikalt i GUI
  111.  
  112.         self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
  113.         self.horizontalLayout_2.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
  114.         self.horizontalLayout_2.setSpacing(1)  # Horizontal layout sætter det op horizontalt
  115.  
  116.         self.label = QtWidgets.QLabel(Form)  # Label indeholder ikke redigerbar tekst
  117.         self.label.setMaximumSize(QtCore.QSize(16777215, 20))
  118.         font = QtGui.QFont()
  119.         font.setPointSize(10)
  120.         self.label.setFont(font)
  121.         self.label.setAlignment(QtCore.Qt.AlignCenter)
  122.  
  123.         self.horizontalLayout_2.addWidget(self.label)
  124.  
  125.         self.verticalLayout.addLayout(self.horizontalLayout_2)
  126.  
  127.         self.formLayout = QtWidgets.QFormLayout()  # Form layout, gør så to ting står ved siden af hinanden i GUI'en
  128.  
  129.         self.label_2 = QtWidgets.QLabel(Form)  # Label se ovenstående
  130.         font = QtGui.QFont()
  131.         font.setPointSize(10)
  132.         self.label_2.setFont(font)
  133.  
  134.         self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2)  # Tilføjer Widget til formlayout
  135.  
  136.         self.lineEdit = QtWidgets.QLineEdit(Form)  # Line edit er en textbox
  137.         self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
  138.  
  139.         self.label_3 = QtWidgets.QLabel(Form)
  140.         font = QtGui.QFont()
  141.         font.setPointSize(10)
  142.  
  143.         self.label_3.setFont(font)  # Label se længere oppe
  144.         self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_3)
  145.  
  146.         self.lineEdit_2 = QtWidgets.QLineEdit(Form)  # Textbox
  147.         self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
  148.  
  149.         self.label_4 = QtWidgets.QLabel(Form)
  150.         font = QtGui.QFont()
  151.         font.setPointSize(10)
  152.         self.label_4.setFont(font)
  153.         self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_4)
  154.  
  155.         self.lineEdit_3 = QtWidgets.QLineEdit(Form)
  156.         self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit_3)
  157.  
  158.         self.label_5 = QtWidgets.QLabel(Form)
  159.         font = QtGui.QFont()
  160.         font.setPointSize(10)
  161.         self.label_5.setFont(font)
  162.         self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5)
  163.  
  164.         self.lineEdit_4 = QtWidgets.QLineEdit(Form)
  165.         self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEdit_4)
  166.         self.verticalLayout.addLayout(self.formLayout)
  167.  
  168.         self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
  169.  
  170.         self.pushButton_2 = QtWidgets.QPushButton(Form)  # Pushbutton er en knap
  171.         self.pushButton_2.setMaximumSize(QtCore.QSize(80, 80))  # Pushbutton2 er til at tilføje
  172.         self.pushButton_2.setLayoutDirection(QtCore.Qt.LeftToRight)
  173.         self.pushButton_2.setIconSize(QtCore.QSize(6, 12))
  174.  
  175.         self.horizontalLayout_5.addWidget(self.pushButton_2)
  176.         self.verticalLayout.addLayout(self.horizontalLayout_5)
  177.         self.horizontalLayout = QtWidgets.QHBoxLayout()
  178.  
  179.         self.pushButton = QtWidgets.QPushButton(Form)  # Push button er til "hjælp" knappen.
  180.         self.pushButton.setMaximumSize(QtCore.QSize(60, 16777215))
  181.         self.pushButton.setText("")
  182.         icon = QtGui.QIcon()
  183.         icon.addPixmap(QtGui.QPixmap("question.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  184.         self.pushButton.setIcon(icon)
  185.  
  186.         self.pushButton.setIconSize(QtCore.QSize(60, 60))
  187.  
  188.         self.horizontalLayout.addWidget(self.pushButton)
  189.         self.verticalLayout.addLayout(self.horizontalLayout)
  190.         spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
  191.         self.verticalLayout.addItem(spacerItem)  # addItem betyder at den bliver tilføjet til layoutet.
  192.  
  193.         self.retranslateUi(Form)
  194.         QtCore.QMetaObject.connectSlotsByName(Form)
  195.  
  196.         self.pushButton_2.clicked.connect(self.add_store)
  197.         self.pushButton.clicked.connect(self.help_button)
  198.  
  199.     def retranslateUi(self, Form):
  200.         _translate = QtCore.QCoreApplication.translate
  201.         Form.setWindowTitle(_translate("Form", "Indtastning"))  # Window titel
  202.         _translate = QtCore.QCoreApplication.translate
  203.         Form.setWindowTitle(_translate("Form", "Indtastning"))
  204.         self.label.setText(_translate("Form", "Tilføj butik"))
  205.         self.label_3.setText(_translate("Form", "Adresse"))
  206.         self.label_2.setText(_translate("Form", "Kæde"))
  207.         self.label_4.setText(_translate("Form", "Postnummer"))
  208.         self.label_5.setText(_translate("Form", "By"))
  209.         self.pushButton_2.setText(_translate("Form", "Tilføj"))
  210.         # Alt teksten til labels og buttons bliver tilføjet her.
  211.  
  212.     def wallpaper(self):
  213.  
  214.         o_image = QImage("normal-bg.png")
  215.         s_image = o_image.scaled(QSize(319, 300))
  216.         palette = QPalette()
  217.         palette.setBrush(10, QBrush(s_image))
  218.         qApp.setPalette(palette)
  219.  
  220.  
  221. if __name__ == "__main__":
  222.     app = QtWidgets.QApplication(sys.argv)
  223.     Form = QtWidgets.QWidget()
  224.  
  225.     app.setStyle("Fusion")
  226.  
  227.     dark_palette = QPalette()
  228.  
  229.     dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
  230.     dark_palette.setColor(QPalette.WindowText, Qt.white)
  231.     dark_palette.setColor(QPalette.Base, QColor(255, 255, 255))
  232.     dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
  233.     dark_palette.setColor(QPalette.ToolTipBase, Qt.white)
  234.     dark_palette.setColor(QPalette.ToolTipText, Qt.white)
  235.     dark_palette.setColor(QPalette.Text, Qt.black)
  236.     dark_palette.setColor(QPalette.Button, QColor(255, 255, 255))
  237.     dark_palette.setColor(QPalette.ButtonText, Qt.darkCyan)
  238.     dark_palette.setColor(QPalette.BrightText, Qt.red)
  239.     dark_palette.setColor(QPalette.Link, QColor(42, 130, 218))
  240.     dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
  241.     dark_palette.setColor(QPalette.HighlightedText, Qt.black)
  242.  
  243.     qApp.setPalette(dark_palette)  # Gør GUI'en sort plus ændre udsende på button, textbox osv.
  244.  
  245.     qApp.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }")
  246.  
  247.     ui = Ui_Admin()
  248.     ui.setupUi(Form)
  249.     Form.show()
  250.  
  251.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement