Example #1
0
class MainWindow(QMainWindow):

    """ This is the Main Window class for the proxy finder tool. """

    def __init__(self):

        super().__init__()

        self.setWindowTitle("Proxy Finder Tool")

        self.resize(250, 300)

        # Attached SQL Connection
        self.connection = None

        self.icon = QIcon(QPixmap("./globe.png"))
        self.setWindowIcon(self.icon)

        self.mainSettings()

        self.stacked_layout = QStackedLayout()

        self.mainLayout()

        self.connections()

        self.widget = QWidget()
        self.widget.setLayout(self.stacked_layout)

        self.setCentralWidget(self.widget)

    def mainSettings(self):

        self.refreshButton = QPushButton("Refresh")
        self.exportList = QPushButton("Save List")

        self.statusBar = QStatusBar()

        self.setStatusBar(self.statusBar)

        self.menuBar = QMenuBar()

        # menus for the main menu bar
        self.databaseMenu = self.menuBar.addMenu("Database")
        self.proxyMenu = self.menuBar.addMenu("Proxies")
        self.helpMenu = self.menuBar.addMenu("Help")

        # actions
        self.getList = QAction("Get List", self)
        self.saveList = QAction("Save List", self)

        self.openDatabase = QAction("Open Database", self)
        self.newDatabase = QAction("New Database", self)
        self.closeDatabase = QAction("Close Database", self)
        self.closeDatabase.setEnabled(False)

        self.about = QAction("About", self)

        # add actions to menus
        self.proxyMenu.addAction(self.getList)
        self.proxyMenu.addAction(self.saveList)

        self.databaseMenu.addAction(self.newDatabase)
        self.databaseMenu.addAction(self.openDatabase)
        self.databaseMenu.addAction(self.closeDatabase)

        self.helpMenu.addAction(self.about)

        # set the menu bar
        self.setMenuBar(self.menuBar)

    def mainLayout(self):

        # this is the main initial layout
        self.resultsTable = QListWidget()

        # current database

        self.currentDatabase = QLabel("Current Database: ")
        self.databaseNameLabel = QLabel("None")

        self.currentDbLayout = QHBoxLayout()
        self.currentDbLayout.addWidget(self.currentDatabase)
        self.currentDbLayout.addWidget(self.databaseNameLabel)

        self.currentDbWidget = QWidget()
        self.currentDbWidget.setLayout(self.currentDbLayout)

        # buttons

        self.btnLayout = QHBoxLayout()

        self.getListBtn = QPushButton("Get List")
        self.saveListBtn = QPushButton("Save List")
        self.exportListBtn = QPushButton("Export List")

        self.btnLayout.addWidget(self.getListBtn)
        self.btnLayout.addWidget(self.saveListBtn)
        self.btnLayout.addWidget(self.exportListBtn)

        self.btnWidget = QWidget()
        self.btnWidget.setLayout(self.btnLayout)

        # Main Layout

        self.mainVertical = QVBoxLayout()
        self.mainVertical.addWidget(self.currentDbWidget)
        self.mainVertical.addWidget(self.resultsTable)
        self.mainVertical.addWidget(self.btnWidget)

        self.disableProxies()
        # Main Widget

        self.mainWidget = QWidget()
        self.mainWidget.setLayout(self.mainVertical)

        # Add to Stacked Layout
        self.stacked_layout.addWidget(self.mainWidget)

    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.connection.close_database()

        self.connection = SQLConnection(path)
        self.connection.create_database()

        self.databaseNameLabel.setText(path)

        self.closeDatabase.setEnabled(True)
        self.openDatabase.setEnabled(False)
        self.newDatabase.setEnabled(False)

        self.statusBar.showMessage("Database has been created.")

        self.enableProxies()

        self.db_open()

    def getProxies(self):
        if self.connection == None:
            self.statusBar.showMessage("No Database Open!")
        else:
            thread = ProxyList()
            thread.complete.connect(self.populate_db)
            thread.start()

    def enableProxies(self):
        self.getList.setEnabled(True)
        self.saveList.setEnabled(True)

        self.getListBtn.setEnabled(True)
        self.saveListBtn.setEnabled(True)
        self.exportListBtn.setEnabled(True)

    def populate_db(self, results):

        self.statusBar.showMessage("Collecting Data. Please wait...")

        for i in range(len(proxies)):
            query = self.connection.addProxy(proxies[i])
            self.statusBar.showMessage("Gathering {0} of {1} proxies.".format(i + 1, len(proxies)))

        self.statusBar.showMessage("Gathering Complete!")

    def populate_table_init(self):

        numberOfProxies = self.connection.numberOfProxies()

        if num > 0:
            results = self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def db_open(self):

        numberOfProxies = self.connection.numberOfProxies()
        num = int(numberOfProxies)
        print(num)
        if num > 0:
            self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def disableProxies(self):
        self.getList.setEnabled(False)
        self.saveList.setEnabled(False)

        self.getListBtn.setEnabled(False)
        self.saveListBtn.setEnabled(False)
        self.exportListBtn.setEnabled(False)

    def openDatabaseConn(self):

        self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.openDatabase.setEnabled(False)
            self.newDatabase.setEnabled(False)
            self.closeDatabase.setEnabled(True)

            self.statusBar.showMessage("Database has been opened.")
            self.databaseNameLabel.setText(path)
            self.enableProxies()
            self.db_open()

    def close_connection(self):
        if self.connection:
            self.connection.close_database()
            self.statusBar.showMessage("Database has been closed.")
            self.databaseNameLabel.setText("None")

            self.newDatabase.setEnabled(True)
            self.openDatabase.setEnabled(True)
            self.closeDatabase.setEnabled(False)

            self.connection = None

            self.disableProxies()
        else:
            self.statusBar.showMessage("No Database to close.")

    def connections(self):

        self.newDatabase.triggered.connect(self.createNewDatabase)
        self.openDatabase.triggered.connect(self.openDatabaseConn)
        self.closeDatabase.triggered.connect(self.close_connection)
        self.getListBtn.clicked.connect(self.getProxies)
        self.getList.triggered.connect(self.getProxies)
Example #2
0
class MainWindow(QMainWindow):
    """ This is the main window class for the plastering job management
program """

    def __init__(self):

        super().__init__()

        self.setWindowTitle("Plastering Job Management Application")
        self.resize(500, 300)
        self.icon = QIcon(QPixmap("./icon.png"))
        self.setWindowIcon(self.icon)

        # Connection Attribute stores the database connection
        self.connection = None

        # stacked layout
        self.stackedLayout = QStackedLayout()

        self.widget = QWidget()

        self.widget.setLayout(self.stackedLayout)

        # Set the central widget to the stacked layout

        self.setCentralWidget(self.widget)

        # Add the Menu Bar and Main Settings Etc...
        self.mainSettings()

        # Create the Widgets
        self.initialCentralWidget()
        self.dbOpenLayout()
        self.clientsLayout()
        self.plasterersLayout()

        # Disable database related actions
        self.dbNotOpen()

        # Setup the PyQt Signals and Connections
        self.connections()

    ##
    ##
    def dbNotOpen(self):

        self.addClient.setEnabled(False)
        self.editClients.setEnabled(False)
        self.searchClients.setEnabled(False)

        self.addPlasterer.setEnabled(False)
        self.editPlasterers.setEnabled(False)
        self.viewPlasterers.setEnabled(False)

        self.addJob.setEnabled(False)
        self.viewJobs.setEnabled(False)

        self.newDatabase.setEnabled(True)
        self.openDatabase.setEnabled(True)
        self.closeDatabase.setEnabled(False)

        self.stackedLayout.setCurrentIndex(0)

    def dbOpen(self):

        self.addClient.setEnabled(True)
        self.editClients.setEnabled(True)
        self.searchClients.setEnabled(True)

        self.addPlasterer.setEnabled(True)
        self.editPlasterers.setEnabled(True)
        self.viewPlasterers.setEnabled(True)

        self.addJob.setEnabled(True)
        self.viewJobs.setEnabled(True)

        self.newDatabase.setEnabled(False)
        self.openDatabase.setEnabled(False)
        self.closeDatabase.setEnabled(True)

        self.stackedLayout.setCurrentIndex(1)

    def mainSettings(self):

        # actions
        self.addClient = QAction("Add Client", self)
        self.editClients = QAction("Edit Clients", self)
        self.searchClients = QAction("Search Clients", self)

        self.addPlasterer = QAction("Add Plasterer", self)
        self.editPlasterers = QAction("Edit Plasterers", self)
        self.viewPlasterers = QAction("View Plasterers", self)

        self.addJob = QAction("New Job", self)
        self.viewJobs = QAction("Manage Jobs", self)

        self.help = QAction("Help", self)
        self.about = QAction("About", self)

        self.openDatabase = QAction("Open Database", self)
        self.newDatabase = QAction("New Database", self)
        self.closeDatabase = QAction("Close Database", self)

        # menu bar
        self.menu = QMenuBar()

        # Database Menu
        self.databaseMenu = self.menu.addMenu("Database")
        self.databaseMenu.addAction(self.newDatabase)
        self.databaseMenu.addAction(self.openDatabase)
        self.databaseMenu.addAction(self.closeDatabase)

        # Clients Menu
        self.clientsMenu = self.menu.addMenu("Clients")
        self.clientsMenu.addAction(self.addClient)
        self.clientsMenu.addAction(self.editClients)
        self.clientsMenu.addAction(self.searchClients)

        # Jobs Menu
        self.jobsMenu = self.menu.addMenu("Jobs")
        self.jobsMenu.addAction(self.addJob)
        self.jobsMenu.addAction(self.viewJobs)

        # Plasterers Menu
        self.plasterersMenu = self.menu.addMenu("Plasterers")
        self.plasterersMenu.addAction(self.addPlasterer)
        self.plasterersMenu.addAction(self.editPlasterers)
        self.plasterersMenu.addAction(self.viewPlasterers)

        # Help Menu
        self.helpMenu = self.menu.addMenu("Help")
        self.helpMenu.addAction(self.help)
        self.helpMenu.addAction(self.about)

        # tool bar
        self.toolBar = QToolBar()
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addClient)
        self.toolBar.addAction(self.editClients)
        self.toolBar.addAction(self.searchClients)
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addPlasterer)
        self.toolBar.addAction(self.editPlasterers)
        self.toolBar.addAction(self.viewPlasterers)
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addJob)
        self.toolBar.addAction(self.viewJobs)
        self.toolBar.addSeparator()
        self.toolBar.setMovable(False)

        self.addToolBar(self.toolBar)

        self.setMenuBar(self.menu)

        self.statusBar = QStatusBar()

        self.setStatusBar(self.statusBar)

    def connections(self):

        self.about.triggered.connect(self.showAboutMessageBox)
        self.newDatabase.triggered.connect(self.createNewDatabase)
        self.openDatabase.triggered.connect(self.openDatabaseConn)
        self.closeDatabase.triggered.connect(self.closeDatabaseConn)
        self.newDbPushButton.clicked.connect(self.createNewDatabase)
        self.openDbPushButton.clicked.connect(self.openDatabaseConn)

        self.clientsPushButton.clicked.connect(self.switchToClientsMenu)
        self.plasterersPushButton.clicked.connect(self.switchToPlasterersMenu)

        self.clientsLayoutWidget.backButton.clicked.connect(self.switchToMainMenu)
        self.plasterersLayoutWidget.backButton.clicked.connect(self.switchToMainMenu)

    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.close_connection()

        self.connection = SQLConnection(path)
        self.connection.create_database()
        self.statusBar.showMessage("A new Database has been created!")
        self.dbOpen()

    def closeDatabaseConn(self):

        if self.connection:
            self.close_connection()
            self.statusBar.showMessage("Database has been closed.")
        else:
            self.statusBar.showMessage("No Database to close!")

    def openDatabaseConn(self):

        if self.connection:
            self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.dbOpen()
            self.statusBar.showMessage("Database has been opened.")

    def close_connection(self):
        if self.connection:
            closed = self.connection.close_database()

            if closed:
                self.statusBar.showMessage("Database has been closed.")
                self.dbNotOpen()
                self.connection = None
            else:
                self.statusBar.showMessage("An error occured!")
        else:
            self.statusBar.showMessage("No Database to close.")

    def dbOpenLayout(self):

        self.setStyleSheet(
            """QPushButton[buttonClass=home] {
                           font-size: 16px; background-color: rgba(188, 188, 188, 50);
                           border: 1px solid rgba(188, 188, 188, 250);
                           height:100px;
                           border-radius:5px;}"""
        )

        self.clientsPushButton = QPushButton("Clients")
        self.clientsPushButton.setProperty("buttonClass", "home")
        self.clientsPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.plasterersPushButton = QPushButton("Plasterers")
        self.plasterersPushButton.setProperty("buttonClass", "home")
        self.plasterersPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.jobsPushButton = QPushButton("Jobs")
        self.jobsPushButton.setProperty("buttonClass", "home")
        self.jobsPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.dbOpenLayout = QHBoxLayout()

        self.dbOpenLayout.addWidget(self.clientsPushButton)
        self.dbOpenLayout.addWidget(self.plasterersPushButton)
        self.dbOpenLayout.addWidget(self.jobsPushButton)

        self.dbOpenWidget = QWidget()

        self.dbOpenWidget.setLayout(self.dbOpenLayout)

        self.stackedLayout.addWidget(self.dbOpenWidget)

    def initialCentralWidget(self):

        self.setStyleSheet(
            """QPushButton[buttonClass=home] {
                           font-size: 16px; background-color: rgba(188, 188, 188, 50);
                           border: 1px solid rgba(188, 188, 188, 250);
                           height:100px;
                           border-radius:5px;}"""
        )

        self.newDbPushButton = QPushButton("New Database")
        self.newDbPushButton.setProperty("buttonClass", "home")
        self.newDbPushButton.setCursor(QCursor(Qt.PointingHandCursor))
        self.openDbPushButton = QPushButton("Open Database")
        self.openDbPushButton.setProperty("buttonClass", "home")
        self.openDbPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.mainLayout = QHBoxLayout()

        self.mainLayout.addWidget(self.newDbPushButton)
        self.mainLayout.addWidget(self.openDbPushButton)

        self.mainWidget = QWidget()

        self.mainWidget.setLayout(self.mainLayout)

        self.stackedLayout.addWidget(self.mainWidget)

    def switchToClientsMenu(self):
        self.stackedLayout.setCurrentIndex(2)

    def switchToPlasterersMenu(self):
        self.stackedLayout.setCurrentIndex(3)

    def switchToMainMenu(self):
        self.stackedLayout.setCurrentIndex(1)

    def clientsLayout(self):
        self.clientsLayoutWidget = ClientsMenuWidget()
        self.stackedLayout.addWidget(self.clientsLayoutWidget)

    def plasterersLayout(self):
        self.plasterersLayoutWidget = PlasterersMenuWidget()
        self.stackedLayout.addWidget(self.plasterersLayoutWidget)

    def showAboutMessageBox(self):

        aboutText = """This application allows plasterers to manage their jobs and clients. \n It was developed by Kyle Kirkby using PyQt4 and Python3."""

        QMessageBox.about(self, "About", aboutText)
class Window(QMainWindow):
    """simple window layout"""
    def __init__(self):
        
        super().__init__()
        #palette = QPalette()
        #palette.setColor(QPalette.Background,QColor(0, 0, 255, 127))

        #self.setPalette(palette)
        
        self.setWindowTitle("Coffee Database PyQt4 SQL")
        self.resize(350,400)
        self.icon = QIcon(QPixmap("./images/coffeeIcon.png"))
        self.setWindowIcon(self.icon)

        #connection
        self.connection = None

        #create the initial layout
        self.initial_layout()
        
    def initial_layout(self):
        
        #create actions
        self.open_database = QAction("Open Database",self)
        self.close_database = QAction("Close Database",self)
        self.show_products = QAction("Show Products",self)
        self.find_products = QAction("Find Products",self)

        self.menu = QMenuBar()
               
        self.database_toolbar = QToolBar()

        self.database_menu = self.menu.addMenu("Database")
        self.products_menu = self.menu.addMenu("Products")

        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)

        self.products_menu.addAction(self.show_products)
        self.products_menu.addAction(self.find_products)

        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)

        self.addToolBar(self.database_toolbar)

        self.setMenuBar(self.menu)

        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)

        self.show_products.triggered.connect(self.show_products_layout)
        self.find_products.triggered.connect(self.find_products_layout)

    def show_products_layout(self):
        
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
            
        self.setCentralWidget(self.display_widget)
        if self.connection != None:
            query = self.connection.show_all_products()
            print(query)
            self.display_widget.show_results(query)
        else:
            print("A DB Connection must be opened")

    def find_products_layout(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)

        if self.connection != None:
            query = self.connection.find_products_by_number((1,))
            print(query)
            self.display_widget.show_results(query)
        else:
            print("A DB connection must be opened!")
        
    def open_connection(self):
        path = QFileDialog.getOpenFileName()

        self.connection = SQLConnection(path)

        opened = self.connection.open_database()

        print(opened)
    def close_connection(self):
        if self.connection:
            self.connection.close_database()
            print("closed")
        else:
            print("no db to close")