コード例 #1
0
class TimeEdit(WidgetWithTZinfo):
    def __init__(self, parent=None):
        super(TimeEdit, self).__init__(parent)
        self.initQTimeEdit()
        self.initTZinfoEdit()

    def initQTimeEdit(self):
        self.timeEdit = QDateTimeEdit(self)
        self.timeEdit.setKeyboardTracking(False)
        self.timeEdit.setDisplayFormat("hh:mm:ss.zzz")
        self.layout().addWidget(self.timeEdit)

    def time(self) -> datetime.time:
        time = self.timeEdit.time().toPyTime()
        tzinfo = self.tzinfoEdit.getObj2add()
        time = time.replace(tzinfo=tzinfo)
        return time

    def setTime(self, val: datetime.time):
        if isinstance(val, datetime.time):
            self.timeEdit.setTime(val)
            self.tzinfoEdit.setVal(val.tzinfo)
        else:
            raise TypeError("arg1 must be instance of type datetime.time",
                            type(val))
コード例 #2
0
ファイル: start_window.py プロジェクト: AcrossPaper/Cat-Mafia
class Start_Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(settings.START_WINDOW_WIDTH,
                    settings.START_WINDOW_HEIGHT)  #Устанавливаем размер окна

        self.work_frame = QFrame(self)

        self.create_evening_game_button = QPushButton("Создать игровой вечер")
        self.date_edit = QDateTimeEdit()
        self.ask_date_label = QLabel("Введите дату игрового вечера")

        self.customise()

    def move_to_center(self):
        # Перенесем окошко в центр
        form_rectangle = self.frameGeometry()
        window_center = QDesktopWidget().availableGeometry().center()
        form_rectangle.moveCenter(window_center)
        self.move(form_rectangle.topLeft())

    def customise(self):
        """Метод настраивает виджеты для работы"""
        self.setWindowTitle("Mafia-Driver")  #Название программы
        self.work_frame.setFrameStyle(QFrame.Box)

        self.move_to_center()

        #Внесем текущую дату с компьютера
        now_date = QDate.currentDate()
        now_time = QTime.currentTime()

        self.date_edit.setDate(now_date)
        self.date_edit.setTime(now_time)

        #Перенесем фрейм в центр
        form_horizontalLayout = QHBoxLayout(self)
        form_horizontalLayout.setContentsMargins(settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT)

        form_horizontalLayout.addWidget(self.work_frame)

        #Настроим макет и виджеты внутри фрейма
        work_frame_horizontallLayout = QHBoxLayout()
        work_frame_veritcallLayout = QVBoxLayout(self.work_frame)

        work_frame_horizontallLayout.addWidget(self.date_edit)
        work_frame_horizontallLayout.addWidget(self.ask_date_label)

        work_frame_veritcallLayout.addLayout(work_frame_horizontallLayout)
        work_frame_veritcallLayout.addWidget(self.create_evening_game_button)
コード例 #3
0
ファイル: utility.py プロジェクト: zxque/tqsdk-python
 def add_input(self, k, v):
     lbl = QLabel(self)
     lbl.setText(k)
     self.vbox.addWidget(lbl)
     if isinstance(v, datetime.date):
         qle = QDateTimeEdit(self)
         qle.setDate(v)
         qle.setDisplayFormat("yyyy.MM.dd")
         qle.setCalendarPopup(True)
     elif isinstance(v, datetime.time):
         qle = QDateTimeEdit(self)
         qle.setTime(v)
         qle.setDisplayFormat("HH:mm:ss")
     else:
         qle = QLineEdit(self)
         qle.setText(str(v))
     self.vbox.addWidget(qle)
     return qle
コード例 #4
0
class Reservations(QWidget):
    """
    Klasa odpowiedzialna za widget klienci
    """
    def __init__(self, parent, db):
        super(QWidget, self).__init__(parent)
        self.parent = parent
        self.btn_mod = QPushButton('Zmiana statusu')
        self.btn_usun = QPushButton('Usuń')
        self.btn_dodaj = QPushButton('Dodaj')
        self.lbl_klient_ = QLabel('')
        self.lbl_usluga_ = QLabel('')
        self.lbl_termin_ = QDateTimeEdit()
        self.gb_layout = QVBoxLayout()
        self.kalendarz = QCalendarWidget()
        self.view_u = QTableView()
        self.view_k = QTableView()
        self.view_p = QTableView()
        self.view = QTableView()
        self.proxy_u = QSortFilterProxyModel(self)
        self.proxy_k = QSortFilterProxyModel(self)
        self.proxy_p = QSortFilterProxyModel(self)
        self.proxy = QSortFilterProxyModel(self)
        self.id_klient = -1
        self.id_usluga = -1
        self.id_pracownik = -1
        self.id_rezerwacje = -1
        self.data = None
        self.data_do = None
        self.dzien_tyg = 0
        self.czas = []

        # Lista składana przycisków godzin
        self.btn_godz = [QPushButton(str(i + 1)) for i in range(16)]

        # Parametry połączenia z bazą
        self.model_u = QSqlTableModel(self, db)
        self.model_k = QSqlTableModel(self, db)
        self.model_p = QSqlTableModel(self, db)
        self.model = QSqlTableModel(self, db)

        self.initUI()

    def initUI(self):
        """
        Inicjuje UI
        """
        self.view_u.setObjectName('Usługi')
        self.view_k.setObjectName('Klienci')
        self.view_p.setObjectName('Pracownicy')
        self.view.setObjectName('Rezerwacje')
        self.table_init_u()
        self.table_init_k()
        self.table_init_p()
        self.table_init()
        self.btn_mod.setDisabled(True)
        self.btn_usun.setDisabled(True)
        self.btn_dodaj.setDisabled(True)

        # Tworzenie kontrolek
        lbl_wysz_u = QLabel('Wyszukaj usługę:')
        lbl_wysz_k = QLabel('Wyszukaj klienta:')
        lbl_wysz_p = QLabel('Wyszukaj pracownika:')
        txt_wysz_u = QLineEdit(self)
        txt_wysz_k = QLineEdit(self)
        txt_wysz_p = QLineEdit(self)
        lbl_klient = QLabel('Klient:')
        lbl_usluga = QLabel('Usługa:')
        lbl_termin = QLabel('Termin:')

        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.kalendarz.sizePolicy().hasHeightForWidth())
        self.kalendarz.setSizePolicy(sizePolicy)

        # Tworzenie widoków
        centralbox = QHBoxLayout()
        hbox_wysz_u = QHBoxLayout()
        hbox_wysz_k = QHBoxLayout()
        hbox_wysz_p = QHBoxLayout()
        vbox_u = QVBoxLayout()
        vbox_k = QVBoxLayout()
        vbox_p = QVBoxLayout()
        vbox_right = QVBoxLayout()
        hbox_btn = QHBoxLayout()
        hbox_k = QHBoxLayout()
        hbox_u = QHBoxLayout()
        hbox_t = QHBoxLayout()
        vbox_cal = QVBoxLayout()
        groupbox = QGroupBox('Godziny:')
        groupbox.setLayout(self.gb_layout)
        hbox_left = QHBoxLayout()

        # Metody
        self.lbl_termin_.setCalendarWidget(self.kalendarz)
        self.lbl_termin_.setDate(self.kalendarz.selectedDate())
        self.dzien_tyg = self.kalendarz.selectedDate().dayOfWeek()
        txt_wysz_u.textChanged.connect(self.searching_u)
        txt_wysz_k.textChanged.connect(self.searching_k)
        txt_wysz_p.textChanged.connect(self.searching_p)
        self.view_k.clicked.connect(lambda: self.clicked_table(self.view_k))
        self.view_p.clicked.connect(lambda: self.clicked_table(self.view_p))
        self.view_u.clicked.connect(lambda: self.clicked_table(self.view_u))
        self.view.clicked.connect(lambda: self.clicked_table(self.view))
        self.kalendarz.clicked.connect(self.show_data)
        self.btn_dodaj.clicked.connect(self.add)
        self.btn_mod.clicked.connect(self.modify)
        self.btn_usun.clicked.connect(self.remove)

        # Ustawianie widoków
        hbox_wysz_k.addWidget(lbl_wysz_k)
        hbox_wysz_k.addWidget(txt_wysz_k)
        hbox_wysz_p.addWidget(lbl_wysz_p)
        hbox_wysz_p.addWidget(txt_wysz_p)
        hbox_wysz_u.addWidget(lbl_wysz_u)
        hbox_wysz_u.addWidget(txt_wysz_u)
        vbox_u.addLayout(hbox_wysz_u)
        vbox_u.addWidget(self.view_u)
        vbox_k.addLayout(hbox_wysz_k)
        vbox_k.addWidget(self.view_k)
        vbox_p.addLayout(hbox_wysz_p)
        vbox_p.addWidget(self.view_p)
        vbox_right.addLayout(vbox_p)
        vbox_right.addLayout(vbox_u)
        vbox_right.addLayout(vbox_k)
        hbox_btn.addWidget(self.btn_usun)
        hbox_btn.addWidget(self.btn_mod)
        hbox_k.addWidget(lbl_klient)
        hbox_k.addWidget(self.lbl_klient_)
        hbox_u.addWidget(lbl_usluga)
        hbox_u.addWidget(self.lbl_usluga_)
        hbox_t.addWidget(lbl_termin)
        hbox_t.addWidget(self.lbl_termin_)
        vbox_cal.addWidget(self.kalendarz)
        vbox_cal.addLayout(hbox_u)
        vbox_cal.addLayout(hbox_t)
        vbox_cal.addLayout(hbox_k)
        self.view.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum))
        vbox_cal.addWidget(self.view)
        vbox_cal.addLayout(hbox_btn)
        vbox_cal.addWidget(self.btn_dodaj)
        hbox_left.addLayout(vbox_cal)
        hbox_left.addWidget(groupbox)
        centralbox.addLayout(hbox_left)
        centralbox.addLayout(vbox_right)

        self.setLayout(centralbox)
        self.show()

    def show_data(self):
        self.lbl_termin_.setDate(self.kalendarz.selectedDate())
        self.dzien_tyg = self.kalendarz.selectedDate().dayOfWeek()
        self.clicked_table(self.view_p)

    def table_init_u(self):
        """
        Inicjuje wygląd tabeli usługi
        """
        # self.model_u.setTable('uslugi')
        query = QSqlQuery(
            'SELECT uslugi.uslugi_id, uslugi.nazwa, uslugi.cena, date_format(uslugi.czas, "%H:%i") AS czas FROM uslugi NATURAL JOIN uzytkownik_usluga WHERE uzytkownik_usluga.uzytkownik_id = '
            + str(self.id_pracownik) + ';')
        self.model_u.setQuery(query)
        # self.model_u.select()

        self.proxy_u.setSourceModel(self.model_u)

        naglowki = {
            'uslugi_id': 'ID',
            'nazwa': 'Nazwa',
            'cena': 'Cena',
            "czas": 'Czas',
        }
        # Ustawianie nagłówków
        ilosc_kolumn = self.model_u.columnCount()
        for i in range(ilosc_kolumn):
            nazwa_kolumn = self.model_u.headerData(i, Qt.Horizontal)
            self.model_u.setHeaderData(i, Qt.Horizontal,
                                       naglowki[nazwa_kolumn])

        self.view_u.setSizeAdjustPolicy(
            QAbstractScrollArea.AdjustToContentsOnFirstShow)
        self.view_u.setSortingEnabled(True)
        self.view_u.setAlternatingRowColors(True)

        # Wczytanie danych
        self.view_u.setModel(self.proxy_u)
        self.view_u.hideColumn(0)
        self.view_u.sortByColumn(1, Qt.AscendingOrder)
        self.view_u.setEditTriggers(QAbstractItemView.NoEditTriggers)

    def table_init_k(self):
        """
        Inicjuje wygląd tabeli klienta
        """
        self.model_k.setTable('klienci')
        query = QSqlQuery(
            'SELECT klienci_id, imie, nazwisko, email, telefon, ulica, numer_mieszkania, miejscowosc, poczta FROM '
            'klienci;')
        self.model_k.setQuery(query)
        # self.model_k.select()

        self.proxy_k.setSourceModel(self.model_k)

        naglowki = {
            'klienci_id': 'ID',
            'imie': 'Imię',
            'nazwisko': 'Nazwisko',
            "email": 'Email',
            'telefon': 'Telefon',
            'ulica': 'Ulica',
            'numer_mieszkania': 'Numer mieszkania',
            'miejscowosc': 'Miejscowosc',
            'poczta': 'Kod pocztowy',
        }
        # Ustawianie nagłówków
        ilosc_kolumn = self.model_k.columnCount()
        for i in range(ilosc_kolumn):
            nazwa_kolumn = self.model_k.headerData(i, Qt.Horizontal)
            self.model_k.setHeaderData(i, Qt.Horizontal,
                                       naglowki[nazwa_kolumn])

        self.view_k.setSizeAdjustPolicy(
            QAbstractScrollArea.AdjustToContentsOnFirstShow)
        self.view_k.setSortingEnabled(True)
        self.view_k.setAlternatingRowColors(True)

        # Wczytanie danych
        self.view_k.setModel(self.proxy_k)
        self.view_k.hideColumn(0)
        self.view_k.sortByColumn(1, Qt.AscendingOrder)
        self.view_k.setEditTriggers(QAbstractItemView.NoEditTriggers)

    def table_init_p(self):
        """
        Inicjuje wygląd tabeli pracownik
        """
        self.model_p.setTable('uzytkownik')
        query = QSqlQuery(
            'SELECT uzytkownik_id,  imie, nazwisko FROM uzytkownik WHERE '
            'pracownik = 1;')
        self.model_p.setQuery(query)
        # self.model_p.select()

        self.proxy_p.setSourceModel(self.model_p)

        naglowki = {
            'uzytkownik_id': 'ID',
            'imie': 'Imię',
            "nazwisko": 'Nazwisko',
        }
        # Ustawianie nagłówków
        ilosc_kolumn = self.model_p.columnCount()
        for i in range(ilosc_kolumn):
            nazwa_kolumn = self.model_p.headerData(i, Qt.Horizontal)
            self.model_p.setHeaderData(i, Qt.Horizontal,
                                       naglowki[nazwa_kolumn])

        self.view_p.setSizeAdjustPolicy(
            QAbstractScrollArea.AdjustToContentsOnFirstShow)
        self.view_p.setSortingEnabled(True)
        self.view_p.setAlternatingRowColors(True)

        # Wczytanie danych
        self.view_p.setModel(self.proxy_p)
        self.view_p.hideColumn(0)
        self.view_p.sortByColumn(1, Qt.AscendingOrder)
        self.view_p.setEditTriggers(QAbstractItemView.NoEditTriggers)

    def table_init(self):
        """
        Inicjuje wygląd tabeli
        """
        query = QSqlQuery(
            'SELECT wizyty.wizyty_id, CONCAT(klienci.imie, " ", klienci.nazwisko) AS klient, uslugi.nazwa, '
            'wizyty.rezerwacja_od, wizyty.rezerwacja_do, wizyty.status FROM klienci, uslugi NATURAL JOIN wizyty WHERE wizyty.rezerwacja_od > CURRENT_TIMESTAMP AND wizyty.uzytkownik_id = '
            + str(self.id_pracownik) + ';')
        self.model.setQuery(query)
        self.proxy.setSourceModel(self.model)

        naglowki = {
            'wizyty_id': 'ID',
            'klient': 'Klient',
            'nazwa': 'Usługa',
            'rezerwacja_od': 'Rezerwacja od',
            "rezerwacja_do": 'Rezerwacja do',
            'status': 'Status rezerwacji'
        }
        # Ustawianie nagłówków
        ilosc_kolumn = self.model.columnCount()
        for i in range(ilosc_kolumn):
            nazwa_kolumn = self.model.headerData(i, Qt.Horizontal)
            self.model.setHeaderData(i, Qt.Horizontal, naglowki[nazwa_kolumn])

        self.view.setSizeAdjustPolicy(
            QAbstractScrollArea.AdjustToContentsOnFirstShow)
        self.view.setSortingEnabled(True)
        self.view.setAlternatingRowColors(True)

        # Wczytanie danych
        self.view.setModel(self.proxy)
        self.view.hideColumn(0)
        self.view.sortByColumn(4, Qt.AscendingOrder)
        self.view.setEditTriggers(QAbstractItemView.NoEditTriggers)

    def clicked_table(self, view):
        """
        Metoda edytująca zaznaczone wiersze - Wstawia wartości z wierszy w odpowiednie pola
        """
        index = (view.selectionModel().currentIndex())
        if view.objectName() == 'Klienci':
            self.id_klient = index.sibling(index.row(), 0).data()
            self.lbl_klient_.setText('<b>' +
                                     index.sibling(index.row(), 1).data() +
                                     ' ' +
                                     index.sibling(index.row(), 2).data() +
                                     '</b>')
        elif view.objectName() == 'Usługi':
            self.id_usluga = index.sibling(index.row(), 0).data()
            self.lbl_usluga_.setText('<b>' +
                                     index.sibling(index.row(), 1).data() +
                                     '</b>')
            self.data_do = index.sibling(index.row(), 3).data()
        elif view.objectName() == 'Rezerwacje':
            self.id_rezerwacje = index.sibling(index.row(), 0).data()
            if self.id_rezerwacje > 0:
                self.btn_mod.setEnabled(True)
                self.btn_usun.setEnabled(True)
        elif view.objectName() == 'Pracownicy':
            self.id_pracownik = index.sibling(index.row(), 0).data()
            self.czas = []
            for i in reversed(range(self.gb_layout.count())):
                self.gb_layout.itemAt(i).widget().setParent(None)
            czas = datetime.datetime(2000, 1, 1, 8, 0)
            dzien = {
                1: ('pon_od', 'pon_do'),
                2: ('wt_od', 'wt_do'),
                3: ('sr_od', 'sr_do'),
                4: ('czw_od', 'czw_do'),
                5: ('pt_od', 'pt_do'),
                6: ('sob_od', 'sob_do'),
                7: ('', '')
            }
            query = 'SELECT date_format({}, "%H") AS g_start, date_format({}, "%H") AS g_stop FROM godziny WHERE ' \
                    'uzytkownik_id = {};'.format(dzien[self.dzien_tyg][0], dzien[self.dzien_tyg][1], self.id_pracownik)
            wynik = query_to_db(query)
            if wynik:
                godzina_stop = (int(wynik[1]) - int(wynik[0])) * 2
                godzina = int(wynik[0])
                for btn in self.btn_godz:
                    btn.setEnabled(True)
            else:
                godzina_stop = 0
                godzina = 1
                for btn in self.btn_godz:
                    btn.setDisabled(True)
            minuta = 0
            czas = datetime.time(godzina, minuta)
            for i in range(godzina_stop):
                self.btn_godz[i].setText(czas.strftime("%H:%M"))
                self.czas.append(czas)
                self.btn_godz[i].setObjectName(str(i))
                self.gb_layout.addWidget(self.btn_godz[i])
                if i % 2 != 0:
                    godzina += 1
                    minuta = 0
                else:
                    minuta = 30
                czas = datetime.time(godzina, minuta)
            QMetaObject.connectSlotsByName(self)

            # Czyszczenie, odświeżanie
            self.refresh()
            query = QSqlQuery(
                'SELECT uslugi.uslugi_id, uslugi.nazwa, uslugi.cena, date_format(uslugi.czas, "%H:%i") AS czas FROM uslugi NATURAL JOIN uzytkownik_usluga WHERE uzytkownik_usluga.uzytkownik_id = '
                + str(self.id_pracownik) + ';')
            self.model_u.setQuery(query)
            self.lbl_klient_.setText('')
            self.lbl_usluga_.setText('')

        if self.id_klient > 0 and self.id_pracownik > 0 and self.id_usluga > 0:
            self.btn_dodaj.setEnabled(True)

    def if_checked(self, txt, q, val=None):
        """
        Sprawdza poprawność wprowadzonych damych.
        :param val: wartości do zapytania
        :param q: zapytanie query MySql
        :param txt: komunikat
        """
        if self.id_klient < 0 and self.id_pracownik < 0 and self.id_usluga < 0 and self.data is None:
            msg = QMessageBox(self)
            msg.setIcon(QMessageBox.Warning)
            msg.setText(txt)
            msg.setWindowTitle("Popraw dane")
            msg.exec_()
            return False
        else:
            print('Trwa zmiana w bazie danych')
            if val:
                print('Połączenie')
                query_to_db(q, val)
            else:
                print('Transakcja')
                return transaction_to_db(q)

            return True

    def refresh(self):
        """
        Odświeża widok tabeli rezerwacji
        """
        # Odświeżanie widoku tabeli
        query = QSqlQuery(
            'SELECT wizyty.wizyty_id, CONCAT(klienci.imie, " ", klienci.nazwisko) AS klient, uslugi.nazwa, '
            'wizyty.rezerwacja_od, wizyty.rezerwacja_do, wizyty.status FROM wizyty,klienci,uslugi WHERE wizyty.klienci_id= klienci.klienci_id AND wizyty.uslugi_id = uslugi.uslugi_id AND wizyty.rezerwacja_od > CURRENT_TIMESTAMP AND wizyty.uzytkownik_id = '
            + str(self.id_pracownik) + ';')
        self.model.setQuery(query)
        self.view.reset()

    def add(self):
        """
        Dodaje rezerwację do bazy danych i odświeża widok.
        """
        tekst = 'Nie wprowadzono wszystkich danych'
        self.data = self.lbl_termin_.dateTime().toString(Qt.ISODate)
        self.data_do = datetime.datetime.fromisoformat(
            self.data) + datetime.timedelta(
                hours=datetime.time.fromisoformat(self.data_do).hour,
                minutes=datetime.time.fromisoformat(self.data_do).minute)
        # Dodanie nowego użytkownika
        query = 'INSERT INTO wizyty (klienci_id, uslugi_id, uzytkownik_id, rezerwacja_od, rezerwacja_do, ' \
                'status) VALUES (%s, %s, %s, %s, %s, %s);'
        val = (self.id_klient, self.id_usluga, self.id_pracownik, self.data,
               str(self.data_do.isoformat()), 'oczekuje')
        print(val)

        if self.if_checked(tekst, query, val):
            msg = QMessageBox(self)
            msg.setIcon(QMessageBox.Information)
            msg.setText('Rezerwacja została dodana do bazy danych')
            msg.setWindowTitle("Dodano nową rezerwację")
            msg.exec_()
            self.refresh()

    def modify(self):
        """
        Zmienia status rezerwacji i odświeża widok.
        """
        tekst = 'Nie wprowadzono wszystkich danych'

        items = ('Oczekuje', 'Wykonana', 'Rezygnacja')
        item, ok = QInputDialog.getItem(self, "Wybierz status",
                                        "Wybierz nowy status rezerwacji",
                                        items, 0, False)

        if ok and item:
            # Zmodyfikowanie statusu
            query = 'UPDATE wizyty SET status = %s WHERE wizyty_id = %s;'
            val = (item.lower(), self.id_rezerwacje)

            if self.if_checked(tekst, query, val):
                msg = QMessageBox(self)
                msg.setIcon(QMessageBox.Information)
                msg.setText('Status rezerwacji został zmodyfikowany')
                msg.setWindowTitle("Zmodyfikowano status")
                msg.exec_()
                self.refresh()

    def remove(self):
        """
        Usuwa rezerwację z bazy danych
        """
        test = 'Błąd! Nie można usunąć danej rezerwacji!'
        query = 'DELETE FROM wizyty WHERE wizyty_id = %s'
        val = (self.id_rezerwacje, )
        ret = QMessageBox.question(
            self, 'Usuwanie rezerwacji',
            "Czy na pewno chcesz usunąć daną rezerwację klienta?",
            QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if ret == QMessageBox.Yes:
            if self.if_checked(test, query, val):
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setText('Rezerwacja została usunięta')
                msg.setWindowTitle("Usunięto")
                msg.exec_()

                self.refresh()

    @pyqtSlot()
    def on_0_clicked(self):
        self.lbl_termin_.setTime(self.czas[0])

    @pyqtSlot()
    def on_1_clicked(self):
        self.lbl_termin_.setTime(self.czas[1])

    @pyqtSlot()
    def on_2_clicked(self):
        self.lbl_termin_.setTime(self.czas[2])

    @pyqtSlot()
    def on_3_clicked(self):
        self.lbl_termin_.setTime(self.czas[3])

    @pyqtSlot()
    def on_4_clicked(self):
        self.lbl_termin_.setTime(self.czas[4])

    @pyqtSlot()
    def on_5_clicked(self):
        self.lbl_termin_.setTime(self.czas[5])

    @pyqtSlot()
    def on_6_clicked(self):
        self.lbl_termin_.setTime(self.czas[6])

    @pyqtSlot()
    def on_7_clicked(self):
        self.lbl_termin_.setTime(self.czas[7])

    @pyqtSlot()
    def on_8_clicked(self):
        self.lbl_termin_.setTime(self.czas[8])

    @pyqtSlot()
    def on_9_clicked(self):
        self.lbl_termin_.setTime(self.czas[9])

    @pyqtSlot()
    def on_10_clicked(self):
        self.lbl_termin_.setTime(self.czas[10])

    @pyqtSlot()
    def on_11_clicked(self):
        self.lbl_termin_.setTime(self.czas[11])

    @pyqtSlot()
    def on_12_clicked(self):
        self.lbl_termin_.setTime(self.czas[12])

    @pyqtSlot()
    def on_13_clicked(self):
        self.lbl_termin_.setTime(self.czas[13])

    @pyqtSlot()
    def on_14_clicked(self):
        self.lbl_termin_.setTime(self.czas[14])

    @pyqtSlot()
    def on_15_clicked(self):
        self.lbl_termin_.setTime(self.czas[15])

    @pyqtSlot(str)
    def searching_u(self, text):
        """
        Wyszukuje po wszystkich kolumnach tabeli
        :param text:
        """
        search = QRegExp(text, Qt.CaseInsensitive, QRegExp.RegExp)
        self.proxy_u.setFilterRegExp(search)
        # Odpowiedzialne za kolumnę, po której filtruje
        self.proxy_u.setFilterKeyColumn(-1)

    @pyqtSlot(str)
    def searching_k(self, text):
        """
        Wyszukuje po wszystkich kolumnach tabeli
        :param text:
        """
        search = QRegExp(text, Qt.CaseInsensitive, QRegExp.RegExp)
        self.proxy_k.setFilterRegExp(search)
        # Odpowiedzialne za kolumnę, po której filtruje
        self.proxy_k.setFilterKeyColumn(-1)

    @pyqtSlot(str)
    def searching_p(self, text):
        """
        Wyszukuje po wszystkich kolumnach tabeli
        :param text:
        """
        search = QRegExp(text, Qt.CaseInsensitive, QRegExp.RegExp)
        self.proxy_p.setFilterRegExp(search)
        # Odpowiedzialne za kolumnę, po której filtruje
        self.proxy_p.setFilterKeyColumn(-1)
コード例 #5
0
ファイル: gui.py プロジェクト: helomair/ccu_crawler
class EventController(QWidget):
    def __init__(self, parent=None, default_style='Fusion'):
        super(EventController, self).__init__(parent)

        # main window attribute
        self.setGeometry(300, 100, 800, 800)
        self.setWindowTitle('Event controller')
        QApplication.setStyle(QStyleFactory.create(default_style))

        # needed information
        self.course_list = []
        self.event_list = []

        # call google api
        self.google_cal = GoogleApi('calendar', 'v3')
        self.attendee = []

        # create groups to control widgets position
        self.create_course_group()

        # set style
        style_layout = QHBoxLayout()
        style_label = QLabel('Style:')
        # QLabel.setBuddy

        style_combo = QComboBox()
        style_combo.addItems(QStyleFactory.keys())
        style_combo.activated[str].connect(self.change_style)

        # set style combo box index
        style_index = QStyleFactory.keys()
        style_index = style_index.index(default_style)
        style_combo.setCurrentIndex(style_index)

        style_layout.addWidget(style_label)
        style_layout.addWidget(style_combo)
        style_layout.addStretch(1)

        # set submit button
        submit_layout = QHBoxLayout()
        
        submit_btn = QPushButton('Submit')
        submit_btn.clicked.connect(self.submit_event)

        clean_btn = QPushButton('Clean')
        clean_btn.clicked.connect(self.clean_all)

        submit_layout.addStretch(1)
        submit_layout.addWidget(submit_btn)
        submit_layout.addWidget(clean_btn)

        # set main layout
        main_layout = QGridLayout()
        main_layout.addLayout(style_layout, 0, 0, 1, 2)
        main_layout.addWidget(self.course_group, 1, 0)
        main_layout.addLayout(submit_layout, 2, 0, 1, 2)

        self.setLayout(main_layout)

    def change_style(self, style_name):
        QApplication.setStyle(QStyleFactory.create(style_name))
        QApplication.setPalette(QApplication.style().standardPalette())

    def submit_event(self):
        course_name = self.course_combo.currentText()
        event_type = self.event_combo.currentText()
        desc = self.desc_line_edit.text()

        event_info = f'{course_name}-{event_type}{desc}'
        print(event_info, end=' ')

        start_time = self.start_datetime.dateTime().toString(Qt.ISODate)[:-3]
        end_time = self.end_datetime.dateTime().toString(Qt.ISODate)[:-3]

        print(f'{start_time} -- {end_time}')
        self.google_cal.add_event(event_info, start_time=start_time, event_time=end_time, attendees=self.attendee)

    def clean_all(self):
        """
        reset all parameter
        """
        # reset course_group
        self.course_combo.setCurrentIndex(0)
        self.event_combo.setCurrentIndex(0)
        
        # reset desc line edit
        self.desc_line_edit.clear()

        # reset start
        self.start_datetime.setDateTime(QDateTime.currentDateTime())

        # reset terminal time
        self.end_datetime.setDate(QDate.currentDate())
        self.end_datetime.setTime(QTime(23, 59))
        

    def create_course_group(self):
        self.course_group = QGroupBox('course group')

        self.course_list.extend(['ML', 'DL', 'CD'])
        
        self.event_list.extend(['HW', 'assignment', 'exam', 'lab', 'midterm', 'final'])

        # course name block
        course_layout = QVBoxLayout()
        course_label = QLabel('Course name')

        self.course_combo = QComboBox()
        self.course_combo.addItems(self.course_list)

        # course_layout.addStretch(1)
        course_layout.addWidget(course_label)
        course_layout.addWidget(self.course_combo)
        course_layout.addStretch(1)

        # event type block
        event_layout = QVBoxLayout()
        event_label = QLabel('Event type')

        self.event_combo = QComboBox()
        self.event_combo.addItems(self.event_list)

        # event_layout.addStretch(1)
        event_layout.addWidget(event_label)
        event_layout.addWidget(self.event_combo)
        event_layout.addStretch(1)

        # event description
        desc_layout = QVBoxLayout()
        desc_label = QLabel('Description')

        self.desc_line_edit = QLineEdit()
        self.desc_line_edit.setMaxLength(5)

        # desc_layout.addStretch(1)
        desc_layout.addWidget(desc_label)
        desc_layout.addWidget(self.desc_line_edit)
        desc_layout.addStretch(1)

        # start datetime block
        start_layout = QVBoxLayout()
        start_label = QLabel('Start time')

        self.start_datetime = QDateTimeEdit()
        self.start_datetime.setCalendarPopup(True)
        self.start_datetime.setMinimumDateTime(QDateTime.currentDateTime())
        self.start_datetime.dateChanged.connect(self.datetime_synch)

        # start_layout.addStretch(1)
        start_layout.addWidget(start_label)
        start_layout.addWidget(self.start_datetime)
        start_layout.addStretch(1)

        # end datetime block
        end_layout = QVBoxLayout()
        end_label = QLabel('Terminate time')

        self.end_datetime = QDateTimeEdit()
        self.end_datetime.setCalendarPopup(True)
        self.end_datetime.setMinimumDate(QDate.currentDate())
        self.end_datetime.setTime(QTime(23, 59))

        # end_layout.addStretch(1)
        end_layout.addWidget(end_label)
        end_layout.addWidget(self.end_datetime)
        end_layout.addStretch(1)

        # layout box
        layout = QHBoxLayout()
        layout.addLayout(course_layout)
        layout.addLayout(event_layout)
        layout.addLayout(desc_layout)
        layout.addLayout(start_layout)
        layout.addLayout(end_layout)
        layout.addStretch(1)
        
        self.course_group.setLayout(layout)

    # change end datetime binding to start_datetime
    def datetime_synch(self, date):

        self.end_datetime.setDate(date)
        self.end_datetime.setTime(
            QTime(23, 59)
        )
コード例 #6
0
ファイル: racebuilder.py プロジェクト: slimemold/sexythyme
class StartTimeSetup(QWidget):
    """Start Time Setup

    This widget allows the user to set up start times. Start times can be the same for the entire
    race, or it can be the same for a particular field. Or, the start times can be assigned
    at a set interval.
    """

    def __init__(self, modeldb, parent=None):
        """Initialize the StartTimeSetup instance."""
        super().__init__(parent=parent)

        self.modeldb = modeldb

        field_table_model = self.modeldb.field_table_model
        field_name_column = field_table_model.name_column

        # Scope selection (whole race vs a field).
        field_selection_widget = QGroupBox('Set up start times for:')

        scope_button_group = QButtonGroup()
        self.all_fields_radiobutton = QRadioButton('Entire race')
        self.all_fields_radiobutton.setChecked(True)
        scope_button_group.addButton(self.all_fields_radiobutton)
        self.selected_field_radiobutton = QRadioButton('A single field:')
        scope_button_group.addButton(self.selected_field_radiobutton)

        self.selected_field_combobox = QComboBox()
        self.selected_field_combobox.setModel(field_table_model)
        self.selected_field_combobox.setModelColumn(field_name_column)
        self.selected_field_combobox.setEnabled(False)

        field_selection_widget.setLayout(QHBoxLayout())
        field_selection_widget.layout().addWidget(self.all_fields_radiobutton)
        field_selection_widget.layout().addWidget(self.selected_field_radiobutton)
        field_selection_widget.layout().addWidget(self.selected_field_combobox)

        # Start time.
        start_time_widget = QGroupBox('Start time:')

        start_time_button_group = QButtonGroup()
        self.start_time_now_radiobutton = QRadioButton('Now')
        self.start_time_now_radiobutton.setChecked(True)
        start_time_button_group.addButton(self.start_time_now_radiobutton)
        self.start_time_specified_radiobutton = QRadioButton('At:')
        start_time_button_group.addButton(self.start_time_specified_radiobutton)
        self.start_time_datetimeedit = QDateTimeEdit() # Time "now" set in showEvent()
        self.start_time_datetimeedit.setDisplayFormat(defaults.DATETIME_FORMAT)
        self.start_time_datetimeedit.setEnabled(False)

        start_time_widget.setLayout(QHBoxLayout())
        start_time_widget.layout().addWidget(self.start_time_now_radiobutton)
        start_time_widget.layout().addWidget(self.start_time_specified_radiobutton)
        start_time_widget.layout().addWidget(self.start_time_datetimeedit)

        # Start time interval.
        interval_widget = QGroupBox('Interval:')

        interval_button_group = QButtonGroup()
        self.same_start_time_radiobutton = QRadioButton('Same for all')
        self.same_start_time_radiobutton.setChecked(True)
        interval_button_group.addButton(self.same_start_time_radiobutton)
        self.interval_start_time_radiobutton = QRadioButton('Use interval:')
        interval_button_group.addButton(self.interval_start_time_radiobutton)

        self.interval_lineedit = QLineEdit()
        self.interval_lineedit.setText(str(defaults.START_TIME_INTERVAL_SECS))
        self.interval_lineedit.setValidator(QRegExpValidator(QRegExp('[1-9][0-9]*')))
        interval_lineedit_group = QWidget()
        interval_lineedit_group.setLayout(QHBoxLayout())
        interval_lineedit_group.layout().addWidget(self.interval_lineedit)
        interval_lineedit_group.layout().addWidget(QLabel('secs'))
        interval_lineedit_group.setEnabled(False)

        interval_widget.setLayout(QHBoxLayout())
        interval_widget.layout().addWidget(self.same_start_time_radiobutton)
        interval_widget.layout().addWidget(self.interval_start_time_radiobutton)
        interval_widget.layout().addWidget(interval_lineedit_group)

        confirm_button = QPushButton('Assign Start Times')

        # Top-level widgets.
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(field_selection_widget)
        self.layout().addWidget(start_time_widget)
        self.layout().addWidget(interval_widget)
        self.layout().addWidget(confirm_button)

        # Signals/slots plumbing.
        confirm_button.clicked.connect(self.handle_assign_start_times)
        self.selected_field_radiobutton.toggled.connect(self.selected_field_combobox.setEnabled)
        self.start_time_specified_radiobutton.toggled.connect(self.start_time_datetimeedit
                                                              .setEnabled)
        self.interval_start_time_radiobutton.toggled.connect(interval_lineedit_group
                                                             .setEnabled)

    def handle_assign_start_times(self):
        """Assign the start times, given the contents of the various input widgets."""
        race_table_model = self.modeldb.race_table_model
        racer_table_model = self.modeldb.racer_table_model

        # Validate inputs.
        if not self.interval_lineedit.text().isdigit:
            raise Exception('Invalid interval')

        field = None
        if self.selected_field_radiobutton.isChecked():
            field = self.selected_field_combobox.currentText()

        reference_datetime = race_table_model.get_reference_clock_datetime()
        if self.start_time_now_radiobutton.isChecked():
            start_time = reference_datetime.msecsTo(QDateTime.currentDateTime())
        else:
            start_time = reference_datetime.msecsTo(self.start_time_datetimeedit.dateTime())

        interval = 0
        if self.interval_start_time_radiobutton.isChecked():
            interval = int(self.interval_lineedit.text())

        try:
            # If we're potentially going to be overwriting existing start times,
            # warn before committing.
            starts_overwritten = racer_table_model.assign_start_times(field, start_time, interval,
                                                                      True)
            if starts_overwritten > 0:
                if QMessageBox.question(self, 'Question',
                                        'About to overwrite %s existing ' % starts_overwritten +
                                        'start times. Proceed anyway?') != QMessageBox.Yes:
                    return
            racer_table_model.assign_start_times(field, start_time, interval)
        except InputError as e:
            QMessageBox.warning(self, 'Error', str(e))

        success_message = 'Start times have been assigned'
        if field:
            success_message += ' to field "%s"' % field

        start_datetime = reference_datetime.addMSecs(start_time)
        success_message += ' for %s' % start_datetime.toString(Qt.SystemLocaleLongDate)
        if interval:
            success_message += ' at %s secomd intervals' % interval

        success_message += '.'

        QMessageBox.information(self, 'Success', success_message)

    def showEvent(self, event): #pylint: disable=invalid-name
        """Set up input widgets when this widget is shown.

        Basically, this amounts to populating the start time edit box with the current date and
        time, plus some time ahead, rounded to the nearest 5 minutes.
        """
        self.start_time_datetimeedit.setDate(QDate.currentDate())

        now = QTime.currentTime().addSecs(defaults.START_TIME_FROM_NOW_SECS)
        now.setHMS(now.hour(), now.minute() + 5 - now.minute()%5, 0, 0)
        self.start_time_datetimeedit.setTime(now)

        super().showEvent(event)
コード例 #7
0
ファイル: player.py プロジェクト: nzlionhevrt/cctv
class Player(QMainWindow):
    """
    A simple Media Player using VLC and Qt
    """
    def __init__(self, master=None):
        super().__init__()
        self.setWindowTitle("CCTV by @XII")

        # creating a basic vlc instance
        self.instance = vlc.Instance()
        # creating an empty vlc media player
        self.mediaplayer = self.instance.media_player_new()

        self.path = ''

        self.initUI()
        self.isPaused = False
        self.setStyleSheet(open("style.qss", "r").read())

    def initUI(self):
        """
        Set up the user interface, signals & slots
        For better understaning, I made some shortcuts for variables,
        which is the instance of the QtWidgets classes.
        List of shortcuts(made):
        *btn - QPushButton;
        *lbl - QLabel;
        *slr - QSlider;
        *lyt - Q_lyt;
        *ctrl - ctrl;
        """
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)

        #video widget
        self.videoframe = QFrame()
        self.palette = self.videoframe.palette()
        self.palette.setColor(QtGui.QPalette.Window, QtGui.QColor(0, 0, 0))
        self.videoframe.setPalette(self.palette)
        self.videoframe.setAutoFillBackground(True)

        #time value
        self.timevalue = QDateTimeEdit()
        self.timevalue.setDisplayFormat('hh:mm:ss')
        self.timevalue.setReadOnly(True)
        self.timevalue.setFixedSize(80, 30)

        #position slider
        self.position_slr = QSlider(QtCore.Qt.Horizontal, self)
        self.position_slr.setToolTip("Position")
        self.position_slr.setMaximum(1000)
        self.position_slr.sliderMoved.connect(self.set_position)

        #play button
        self.play_btn = QPushButton()
        self.play_btn.setProperty("onplay", True)
        self.play_btn.setObjectName("play")
        self.play_btn.clicked.connect(self.play_pause)

        #stop button
        self.stop_btn = QPushButton()
        self.stop_btn.setObjectName('stop')
        self.stop_btn.clicked.connect(self.stop)

        #analyse button
        self.analyse_btn = QPushButton('Analyse')
        self.analyse_btn.setObjectName('analyse')
        self.analyse_btn.setFixedSize(70, 28)
        self.analyse_btn.clicked.connect(self.start_analyse)
        self.analyse_window = Analyse(self)
        self.analyse_window.off()
        self.analyse_btn.setEnabled(False)
        self.on_analyse = False

        self.details_btn = QPushButton('Details')
        self.details_btn.setVisible(False)
        self.details_btn.setObjectName('details')
        self.details_btn.setFixedSize(70, 28)
        self.details_btn.clicked.connect(self.show_details)

        self.details_wd = pictureViewer()
        self.details_wd.close()

        self.threadpool = QtCore.QThreadPool()
        self.threadpool.setMaxThreadCount(1)
        worker = loadModules(self)
        self.threadpool.start(worker)

        self.path_input = pathLineEdit(self)
        self.path_input.setObjectName('path')

        self.folder_btn = QPushButton()
        self.folder_btn.setObjectName('folder')
        self.folder_btn.clicked.connect(
            lambda x: self.select_folder(foldername=''))

        self.fileslist_lbl = QLabel('Playlist:')
        self.fileslist_lbl.setObjectName('lbl')
        self.fileslist_lbl.setIndent(12)

        self.fileslist = QListWidget()
        self.fileslist.itemClicked.connect(self.select_file)

        self.warnings_lbl = QLabel('Warnings time:')
        self.warnings_lbl.setObjectName('lbl')
        self.warnings_lbl.setIndent(12)

        self.warningslist = QListWidget()

        #volume slider
        self.volume_slr = QSlider(QtCore.Qt.Horizontal, self)
        self.volume_slr.setMaximum(100)
        self.volume_slr.setValue(self.mediaplayer.audio_get_volume())
        self.volume_slr.setToolTip("Volume")
        self.volume_slr.valueChanged.connect(self.set_volume)

        #setting up layouts
        folder_lyt = QHBoxLayout()
        folder_lyt.addWidget(self.path_input)
        folder_lyt.addWidget(self.folder_btn)

        leftside_lyt = QVBoxLayout()
        leftside_lyt.setContentsMargins(0, 10, 0, 0)
        leftside_lyt.addSpacing(6)
        leftside_lyt.addWidget(self.fileslist_lbl)
        leftside_lyt.addWidget(self.fileslist)

        analyse_btns = QHBoxLayout()
        analyse_btns.addWidget(self.details_btn)
        analyse_btns.addWidget(self.analyse_btn)
        leftside_lyt.addLayout(analyse_btns)

        leftside_lyt.addWidget(self.warnings_lbl)
        leftside_lyt.addWidget(self.warningslist)
        leftside_lyt.addLayout(folder_lyt)
        leftside_lyt.addSpacing(6)

        self.leftside_bg = QWidget()
        self.leftside_bg.setObjectName("leftside_bg")
        self.leftside_bg.setLayout(leftside_lyt)

        ctrl_lyt = QHBoxLayout()
        ctrl_lyt.addSpacing(20)
        ctrl_lyt.addWidget(self.play_btn)
        ctrl_lyt.setSpacing(0)
        ctrl_lyt.addWidget(self.stop_btn)
        ctrl_lyt.addStretch(1)
        ctrl_lyt.addWidget(self.volume_slr)

        ctrl_panel_lyt = QVBoxLayout()
        ctrl_panel_lyt.setContentsMargins(60, 12, 60, 12)
        ctrl_panel_lyt.addWidget(self.timevalue, 0, QtCore.Qt.AlignLeft)
        ctrl_panel_lyt.addWidget(self.position_slr)
        ctrl_panel_lyt.addLayout(ctrl_lyt)

        rightside_lyt = QVBoxLayout()
        rightside_lyt.addWidget(self.videoframe)
        rightside_lyt.addLayout(ctrl_panel_lyt)

        main_lyt = QHBoxLayout()
        main_lyt.setSpacing(0)
        main_lyt.setContentsMargins(0, 0, 0, 0)
        main_lyt.addWidget(self.leftside_bg)
        main_lyt.addLayout(rightside_lyt, 60)

        self.widget.setLayout(main_lyt)

        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.updateUI)

        #creates connection to db
        self.db = db_api.create_connection(
            os.path.join(os.getcwd(), 'db', 'data.db'))

    def play_pause(self):
        """
        Toggle play/pause status
        """
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.play_btn.setProperty("onplay", True)
            self.play_btn.setStyle(self.play_btn.style())
            self.isPaused = True

        else:
            if self.mediaplayer.play() == -1:
                return
            self.mediaplayer.play()
            self.play_btn.setProperty("onplay", False)
            self.play_btn.setStyle(self.play_btn.style())

            self.timer.start()
            self.isPaused = False

    def start_analyse(self):

        self.analyse_btn.setEnabled(False)

        try:
            file = self.fileslist.currentItem().text()
        except AttributeError:
            self.analyse_btn.setEnabled(True)
            QMessageBox.information(self, "Warning!",
                                    "You should to select a file.")
            return

        if not self.on_analyse:
            self.setEnabled(False)
            self.analyse_window.on()

            try:
                worker = AnalyseWorker(file, self)
                self.threadpool.start(worker)
            except Exception as e:
                print(e)
        else:
            return

    def show_details(self):

        try:
            file = self.fileslist.currentItem().text()
        except AttributeError:
            self.analyse_btn.setEnabled(True)
            QMessageBox.information(self, "Warning!",
                                    "You should to select a file.")
            return

        item = self.fileslist.currentItem().text()
        if os.path.isdir(os.path.join('warnings', os.path.splitext(item)[0])):
            self.details_wd.show()
            self.details_wd.start(self.fileslist.currentItem().text())
        else:
            return

    def stop_analyse(self):
        self.analyse_window.off()
        self.setEnabled(True)
        self.on_analyse = False

    def stop(self):
        """
        stop player
        """
        if self.mediaplayer.is_playing():
            self.timevalue.setTime(QtCore.QTime.fromMSecsSinceStartOfDay(0))

        self.mediaplayer.stop()

    def select_file(self, item):
        self.open_file(filename=self.path + '/' + item.text())

    def check_warnings_time(self, filename):
        with self.db:
            file_id = db_api.select_file(self.db, filename)
            if file_id:

                #if file in db, then add warning times in list bellow
                timelist = db_api.select_time(self.db, file_id)

                self.warningslist.clear()
                for time in timelist:
                    self.warningslist.addItem(time[0] + "-" + time[1])

                self.details_btn.setVisible(True)

            else:
                self.details_btn.setVisible(False)
                self.warningslist.clear()
                self.warningslist.addItem("There is nothing to show.")

    def open_file(self, filename=''):
        """
        Open a media file in a MediaPlayer
        """
        if filename == '':
            filename = QFileDialog.getOpenFileName(self, "Open File", './')[0]
        if not filename:
            return

        self.check_warnings_time(os.path.split(filename)[1])

        # create the media
        self.media = self.instance.media_new(filename)

        # put the media in the media player
        self.mediaplayer.set_media(self.media)

        # parse the metadata of the file
        self.media.parse_async()

        fullpath = re.escape(filename)

        # get video duration
        time = os.popen("ffmpeg -i {0}".format(fullpath) +
                        " 2>&1 | grep Duration | awk '{print $2}' | tr -d ,"
                        ).read().split(':')
        self.duration = int(3600000 * int(time[0]) + 60000 * int(time[1]) +
                            1000 * float(time[2]))

        # set the title of the track as window title
        self.setWindowTitle("CCTV: " + self.media.get_meta(0))

        # the media player has to be 'connected' to the QFrame
        # (otherwise a video would be displayed in it's own window)
        # this is platform specific!
        # you have to give the id of the QFrame (or similar object) to
        # vlc, different platforms have diffqerent functions for this
        if sys.platform == "linux":  # for Linux using the X Server
            self.mediaplayer.set_xwindow(self.videoframe.winId())
        elif sys.platform == "win32":  # for Windows
            self.mediaplayer.set_hwnd(self.videoframe.winId())
        elif sys.platform == "darwin":  # for MacOS
            self.mediaplayer.set_agl(self.videoframe.windId())
        self.play_pause()

    def set_volume(self, Volume):
        """
        Set the volume
        """
        self.mediaplayer.audio_set_volume(Volume)

    def set_position(self, position):
        """
        Set the position
        """
        # setting the position to where the slider was dragged
        self.mediaplayer.set_position(position / 1000.0)
        # the vlc MediaPlayer needs a float value between 0 and 1, Qt
        # uses integer variables, so you need a factor; the higher the
        # factor, the more precise are the results
        # (1000 should be enough)
        self.timevalue.setTime(
            QtCore.QTime.fromMSecsSinceStartOfDay(
                self.mediaplayer.get_position() * self.duration))

    def set_time(self, time):
        """
        Set time to display
        """
        self.mediaplayer.set_time(time)

    def select_folder(self, foldername=''):
        if foldername == '':
            foldername = str(
                QFileDialog.getExistingDirectory(self, "Select Directory"))
            self.path_input.setText(foldername)
            self.path = foldername
        if not foldername:
            return

        files = os.listdir(foldername)
        self.path = foldername
        self.fileslist.clear()
        for file in files:
            self.fileslist.addItem(file)

    def updateUI(self):
        """
        updates the user interface
        """
        # setting the slider to the desired position
        self.position_slr.setValue(self.mediaplayer.get_position() * 1000)
        self.timevalue.setTime(
            QtCore.QTime.fromMSecsSinceStartOfDay(
                self.mediaplayer.get_position() * self.duration))
        self.volume_slr.setValue(self.mediaplayer.audio_get_volume())

        if not self.mediaplayer.is_playing():
            # no need to call this function if nothing is played
            self.timer.stop()
            if not self.isPaused:
                # after the video finished, the play button stills shows
                # "Pause", not the desired behavior of a media player
                # this will fix it
                self.stop()
コード例 #8
0
class Ui_MainWindow(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.resize(773, 452)

        #메인 화면 색상py
        self.setStyleSheet("color: black;"
                        "background-color: white")

        font = QFont()
        font.setFamily("NanumGothic")
        MainWindow.setFont(font)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setFont(font)
        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QRect(30, 20, 181, 51))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setPointSize(20)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.edit_filePath = QLineEdit(self.centralwidget)
        self.edit_filePath.setGeometry(QRect(60, 80, 551, 21))
        self.edit_filePath.setInputMask("")
        self.edit_filePath.setReadOnly(True)
        self.edit_url = QLineEdit(self.centralwidget)
        self.edit_url.setGeometry(QRect(200, 130, 521, 21))
        self.edit_id = QLineEdit(self.centralwidget)
        self.edit_id.setGeometry(QRect(200, 170, 341, 21))
        self.edit_passwd = QLineEdit(self.centralwidget)
        self.edit_passwd.setGeometry(QRect(200, 210, 341, 21))
        self.button_file = QPushButton(self.centralwidget)
        self.button_file.setGeometry(QRect(630, 77, 93, 28))
        
        #버튼 스타일 변경
        self.button_file.setStyleSheet(staticValues.grayButtonStyleSheet)
        self.button_file.setFont(staticValues.buttonFont)

        font = QFont()
        font.setFamily("NanumGothic")
        self.button_file.setFont(font)

        self.button_login = QPushButton(self.centralwidget)
        self.button_login.setGeometry(QRect(630, 210, 93, 28))
        
        #버튼 스타일 변경
        self.button_login.setStyleSheet(staticValues.blueButtonStyleSheet)
        self.button_login.setFont(staticValues.buttonFont)

        font = QFont()
        font.setFamily("NanumGothic")
        self.button_login.setFont(font)
        
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QRect(60, 132, 100, 15))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QRect(60, 172, 120, 15))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setGeometry(QRect(60, 212, 101, 16))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setGeometry(QRect(60, 270, 101, 16))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_6 = QLabel(self.centralwidget)
        self.label_6.setGeometry(QRect(80, 312, 101, 16))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(False)
        font.setWeight(50)
        self.label_6.setFont(font)
        self.label_7 = QLabel(self.centralwidget)
        self.label_7.setGeometry(QRect(80, 352, 101, 16))
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(False)
        font.setWeight(50)
        self.label_7.setFont(font)
        self.dateTime_upload = QDateTimeEdit(self.centralwidget)
        self.dateTime_upload.setGeometry(QRect(200, 310, 194, 22))

        #오늘 날짜 세팅
        self.dateTime_upload.setDate(QDate.currentDate())
        self.dateTime_upload.setTime(QTime.currentTime())
        
        self.edit_period = QLineEdit(self.centralwidget)
        self.edit_period.setGeometry(QRect(200, 350, 90, 21))

        #가로/세로 입력창 숫자만 입력하도록 수정
        self.edit_period.setValidator(QIntValidator(1, 1440))

        self.label_8 = QLabel(self.centralwidget)
        self.label_8.setGeometry(QRect(310, 353, 64, 15))
        self.button_write = QPushButton(self.centralwidget)
        self.button_write.setGeometry(QRect(180, 400, 391, 28))

        #버튼 스타일 변경
        self.button_write.setStyleSheet(staticValues.grayButtonStyleSheet)
        self.button_write.setFont(staticValues.buttonFont)
        self.button_write.setEnabled(False)
        
        self.label_countdown = QLabel(self.centralwidget)
        font = QFont()
        font.setFamily("NanumGothic")
        font.setBold(False)
        font.setWeight(10)
        self.label_countdown.setFont(font)
        self.label_countdown.setText(str(0))
        self.label_countdown.setGeometry(QRect(610, 400, 50, 22))

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle("MainWindow")
        self.label.setText("TISAUTORY")
        self.edit_filePath.setPlaceholderText("문단 파일 경로")
        self.button_file.setText("파일 열기")
        self.button_login.setText("로그인")
        self.label_2.setText("URL")
        self.label_3.setText("ID")
        self.label_4.setText("PASSWORD")
        self.label_5.setText("게시 시간 설정")
        self.label_6.setText("게시 시작 날짜")
        self.label_7.setText("게시 주기")
        self.edit_period.setPlaceholderText("분단위 주기")
        self.label_8.setText("분")
        self.button_write.setText("자동 등록 시작")