コード例 #1
0
ファイル: ImageSlider.py プロジェクト: mokomoko5/Cinema
class ImageSlider(QWidget):
    def __init__(self):
        super().__init__()

        # setting title
        self.setWindowTitle("Python ")

        self.setGeometry(600, 600, 900, 300)

        self.hbox = QHBoxLayout()

        self.list_widget = QListWidget()
        #        self.list_widget.setGeometry(50, 70, 300, 150)

        #        item1.setIcon(QIcon("key_icon.ico"))
        self.items = []
        #        for i in range(20):
        #                self.items.append(QListWidgetItem(str(i)))
        #                self.list_widget.addItem(self.items[i])
        #                if(i%2 == 0):
        #                    self.items[i].setIcon(QIcon("thumbnail.jpg"))
        #                else:
        #                    self.items[i].setIcon(QIcon("1.jpg"))

        # setting flow
        self.list_widget.setFlow(QListView.LeftToRight)
        self.list_widget.setIconSize(QtCore.QSize(190, 190))
        self.list_widget.hasAutoScroll()

        self.list_widget.setAutoFillBackground(False)

        self.pic = QPushButton()
        self.pic.clicked.connect(lambda: self.goleftSmooth())
        self.pic.setGeometry(10, 10, 50, 50)
        #use full ABSOLUTE path to the image, not relative
        self.pic.setIcon(QIcon("left.png"))

        self.hbox.addWidget(self.pic)

        self.hbox.addWidget(self.list_widget)

        self.pic2 = QPushButton()
        self.pic2.clicked.connect(lambda: self.gorightSmooth())
        self.pic2.setGeometry(10, 10, 50, 50)
        #use full ABSOLUTE path to the image, not relative
        self.pic2.setIcon(QIcon("right.png"))

        self.hbox.addWidget(self.pic2)

        self.list_widget.horizontalScrollBar().setDisabled(True)
        self.list_widget.horizontalScrollBar().hide()

        self.list_widget.verticalScrollBar().setDisabled(True)
        self.list_widget.verticalScrollBar().hide()

        self.list_widget.setHorizontalScrollMode(
            QAbstractItemView.ScrollPerPixel)

        self.setLayout(self.hbox)

        self.atCurrentRight = 16
        self.atCurrentLeft = 0

        self.timerBaseInterval = 25
        self.floorInterval = 5

        self.timer = QTimer(self)
        self.timer.setInterval(self.timerBaseInterval)
        self.timer.timeout.connect(self.goRight)

        self.timer2 = QTimer(self)
        self.timer2.setInterval(self.timerBaseInterval)
        self.timer2.timeout.connect(self.goLeft)

        self.rightCounter = 0
        self.leftCounter = 0

        self.incrementalStep = 2
        self.counterSize = 410

        self.lingertime = 1
        self.lingertimeCounter = 0

        #        self.list_widget.itemPressed.connect(lambda: self.test())

        self.show()

#    def test(self):
#        print(self.list_widget.selectedItems()[0].url)

#Takes list of images and adds them to the image container of this class

    def setImages(self, images, urls, movieIDs, titles):

        self.list_widget.clear()
        self.items = []

        for i in range(len(images)):
            self.items.append(ClickableThumbnail(urls[i], movieIDs[i]))
            self.items[i].setText(titles[i])
            self.list_widget.addItem(self.items[i])

            pm = QPixmap()
            pm.loadFromData(base64.b64decode(images[i]))
            ic = QIcon()
            ic.addPixmap(pm)
            if (ic.isNull() == False):
                self.items[i].setIcon(ic)

    #movies images to the right to slide left by initiating a timer that moves the images smoothly by pixels
    def goleftSmooth(self):
        self.timer2.start()
        self.pic.setDisabled(True)
        self.pic2.setDisabled(True)

    #movies images to the left to slide right by initiating a timer that moves the images smoothly by pixels
    def gorightSmooth(self):
        self.timer.start()
        self.pic.setDisabled(True)
        self.pic2.setDisabled(True)

    #Function that timer2 uses to movie images right
    #It works by modifying the timer interval (time needed until this function is called again)
    #starts by high time interval to low then to high (slow fast slow)
    def goLeft(self):
        if (self.leftCounter != self.counterSize):

            if (self.leftCounter < math.ceil(self.counterSize * 0.4)):
                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer2.interval() > self.floorInterval):
                        self.timer2.setInterval(self.timer2.interval() - 1)
                        self.lingertime = self.timerBaseInterval - self.timer2.interval(
                        )
                        self.lingertimeCounter = 5
            elif (self.leftCounter >
                  self.counterSize - math.ceil(self.counterSize * 0.4)):

                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer2.interval() < self.timerBaseInterval):
                        self.timer2.setInterval(self.timer2.interval() + 1)
                        self.lingertime = self.timerBaseInterval - self.timer2.interval(
                        )
                        self.lingertimeCounter = 5

            self.list_widget.horizontalScrollBar().setValue(
                self.list_widget.horizontalScrollBar().value() -
                self.incrementalStep)

            self.leftCounter += 1

            self.repaint()

            if (self.leftCounter == math.ceil(self.counterSize / 2)):
                self.lingertimeCounter = 5
                self.lingertime = self.timerBaseInterval

        else:

            self.timer2.setInterval(self.timerBaseInterval)
            self.leftCounter = 0
            self.timer2.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

        if (self.list_widget.horizontalScrollBar().value() == 0):
            self.timer2.setInterval(self.timerBaseInterval)
            self.leftCounter = 0
            self.timer2.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

    #functions similarly to goLeft but adds scrolls to the right by adding pixels to the scrollbar value rather than subtracting
    #TODO: integrate goleft and goright into 1 function, no need for 2
    def goRight(self):

        #        print(self.timer.interval())
        if (self.rightCounter != self.counterSize):

            if (self.rightCounter < math.ceil(self.counterSize * 0.4)):
                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer.interval() > self.floorInterval):
                        self.timer.setInterval(self.timer.interval() - 1)
                        self.lingertime = self.timerBaseInterval - self.timer.interval(
                        )
                        self.lingertimeCounter = 5
            elif (self.rightCounter >
                  self.counterSize - math.ceil(self.counterSize * 0.4)):

                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer.interval() < self.timerBaseInterval):
                        self.timer.setInterval(self.timer.interval() + 1)
                        self.lingertime = self.timerBaseInterval - self.timer.interval(
                        )
                        self.lingertimeCounter = 5

            self.list_widget.horizontalScrollBar().setValue(
                self.list_widget.horizontalScrollBar().value() +
                self.incrementalStep)

            self.rightCounter += 1

            self.repaint()

            if (self.rightCounter == math.ceil(self.counterSize / 2)):
                self.lingertimeCounter = 5
                self.lingertime = self.timerBaseInterval

        else:

            self.timer.setInterval(self.timerBaseInterval)
            self.rightCounter = 0
            self.timer.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

        if (self.list_widget.horizontalScrollBar().value() ==
                self.list_widget.horizontalScrollBar().maximum()):
            self.timer.setInterval(self.timerBaseInterval)
            self.rightCounter = 0
            self.timer.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)
コード例 #2
0
ファイル: CourseMovieLayout.py プロジェクト: mokomoko5/Cinema
class CourseMovieLayout(QWidget):
    goback_request = pyqtSignal(int)
    new_movie_request = pyqtSignal(int)
    _WatchMovie_ = pyqtSignal(str, int)

    def __init__(self, user: User, courseID):
        super().__init__()
        self.list_widget = QListWidget()
        self.user = user
        self.courseID = courseID
        self.controller = CourseMovieController(self.user)
        #        self.list_widget.setFlow(QListView.LeftToRight)
        self.list_widget.setIconSize(QSize(190, 190))
        self.list_widget.hasAutoScroll()

        self.list_widget.setAutoFillBackground(False)
        self.items_title = self.user.courses
        self.Manager = MovieManagement()

        self.error = QLabel()

        self.movies = self.controller.getCMovies(self.courseID)
        self.titles = []
        self.thumbnails = []
        self.urls = []
        self.movieIDs = []
        if (len(self.movies) != 0):
            for i, j, k, w in self.movies:
                self.titles.append(i)
                self.thumbnails.append(j)
                self.urls.append(k)
                self.movieIDs.append(w)
            self.setImages(self.thumbnails, self.urls, self.titles,
                           self.movieIDs)
        else:
            self.error.setText("Course Has No Movies")

        self.back = QPushButton("Back")
        self.back.clicked.connect(lambda: self.BACK())
        self.vbox = QVBoxLayout()

        self.vbox.addWidget(self.list_widget)

        self.vbox.addWidget(self.error)
        self.vbox.addWidget(self.back)

        if (isinstance(self.user, Professor) == True):
            self.add_movie = QPushButton("Add Movie")
            self.add_movie.clicked.connect(
                lambda: self.new_movie_request.emit(self.courseID))
            self.vbox.addWidget(self.add_movie)

        self.setLayout(self.vbox)

        self.list_widget.itemPressed.connect(lambda: self.MovieIsClicked())

    def MovieIsClicked(self):
        self._WatchMovie_.emit(self.list_widget.selectedItems()[0].url,
                               self.list_widget.selectedItems()[0].movieID)

    def BACK(self):
        self.goback_request.emit(3)

    def setImages(self, images, urls, titles, movieIDs):

        self.list_widget.clear()
        self.items = []

        for i in range(len(images)):
            self.items.append(ClickableThumbnail(urls[i], movieIDs[i]))
            self.items[i].setText(titles[i])
            self.list_widget.addItem(self.items[i])
            pm = QPixmap()
            pm.loadFromData(base64.b64decode(images[i]))
            ic = QIcon()
            ic.addPixmap(pm)
            if (ic.isNull() == False):
                self.items[i].setIcon(ic)
コード例 #3
0
class DashboardLayout(QWidget):  
    submitcourse_request = pyqtSignal()
    new_course_request = pyqtSignal()
    openCourse_request = pyqtSignal(int)
    new_movie_request = pyqtSignal()
    
    submitmovie_request = pyqtSignal()
    def __init__(self,user:User):
        super().__init__()
        self.__dashboard_grid = QGridLayout()
        self.user = user
        
        #ADD COURSE GUI
        self.add_course = QPushButton("Add Course") #enroll for student, create for professor
        self.add_course.clicked.connect(lambda:self.new_course_request.emit())
        
  
        
        self.name = ""
        self.syllabus = ""
        

        self.__dashboard_grid.addWidget(self.add_course,1,1)
       
       
        self.movieProperties = [] 
        
        #ADD MOVIE GUI
        

        
        
        
        self.list_widget = QListWidget()
        
#        self.list_widget.setFlow(QListView.LeftToRight) 
        self.list_widget.setIconSize(QSize(190, 190))
        self.list_widget.hasAutoScroll()
        
        self.list_widget.setAutoFillBackground( False )
        self.items_title = self.user.courses
        self.items = []
        
        if(isinstance(self.items_title, int) == False):
            for i in range(len(self.items_title)):
                    self.items.append(ClickableThumbnail(self.items_title[i][1], 0))
                    self.items[i].setText((self.items_title[i][0]))
                    self.list_widget.addItem(self.items[i])
                
        


        self.controller = DashboardController(self.user)

        
        self.__dashboard_grid.addWidget(self.list_widget,2,1)
        
        self.message = QLabel("")
        self.__dashboard_grid.addWidget(self.message,3,1)
        
        self.courseInput = None
        self.setLayout(self.__dashboard_grid)
        
        self.list_widget.itemPressed.connect(lambda: self.CourseIsClicked())
       
#        if len(self.courses)!=0:
#            for course in self.courses:
#                course.clicked.connect(lambda:self.load_course_request.emit(course.text()))
        
        
        
    #contacts controller to submit course, currently is professor's course upload feature
    def submitcourse(self):
        self.result = self.controller.addCourse(self.name, self.syllabus, self.user.id)
        

    #contacts controller to submit movie under name of of course, currently is for professor's movie upload feature
    def submitmovie(self):
        seg = re.split(" / ", self.name) #seg[0] is the course name, seg[1] is the movie name
        courseID = ""
        print(seg[0])
        for i in self.controller.courses:
            print(i[0])
            if (str(i[0]) == str(seg[0])):
                courseID = i[1]
                break
        #self.movieproperties index 0 is the url path and 1 is the thumbnail path
        self.result = self.controller.addMovie(seg[1], courseID,  self.syllabus, self.user.id, self.movieProperties[0], self.movieProperties[1])
        
       
    def CourseIsClicked(self):
#         self._WatchMovie_.emit(self.recommended_display.list_widget.selectedItems()[0].url)
        self.openCourse_request.emit(self.list_widget.selectedItems()[0].url)
        
  
        
            
コード例 #4
0
ファイル: ImageSlider.py プロジェクト: abdallah1012/Cinema
class ImageSlider(QWidget):
    def __init__(self):
        super().__init__()

        # setting title
        self.setWindowTitle("Python ")

        self.setGeometry(1000, 1000, 2000, 100)

        stylesheett = """
            QPushbutton{
            height: 50px;
            width: 50px;
            background-color: rgb(54,57,63);
            background-image: url("./Images/left.png");
            }

            QPushbutton#pic:hover{
            background-color: rgb(54,57,63);
            background-image: url("./Images/left_hover.png");
            }

            QPushbutton#pic2{
            height: 50px;
            width: 50px;
            background-color: rgb(54,57,63);
            background-image: url("./Images/right.png");
            }

            QPushbutton#pic2:hover{
            background-color: rgb(54,57,63);
            background-image: url("./Images/right_hover.png");
            }
        """

        self.setStyleSheet(stylesheett)
        self.hbox = QHBoxLayout()
        self.list_widget = QListWidget()
        self.items = []

        # setting flow
        self.list_widget.setFlow(QListView.LeftToRight)
        self.list_widget.setIconSize(QtCore.QSize(190, 190))
        self.list_widget.hasAutoScroll()

        self.list_widget.setAutoFillBackground(False)

        self.pic = QPushButton()
        self.pic.setObjectName("pic")
        self.pic.clicked.connect(lambda: self.goleftSmooth())

        #use full ABSOLUTE path to the image, not relative

        self.hbox.addWidget(self.pic)

        self.hbox.addWidget(self.list_widget)

        self.pic2 = QPushButton()
        self.pic2.setObjectName("pic2")
        self.pic2.clicked.connect(lambda: self.gorightSmooth())

        self.hbox.addWidget(self.pic2)

        self.list_widget.horizontalScrollBar().setDisabled(True)
        self.list_widget.horizontalScrollBar().hide()

        self.list_widget.verticalScrollBar().setDisabled(True)
        self.list_widget.verticalScrollBar().hide()

        self.list_widget.setHorizontalScrollMode(
            QAbstractItemView.ScrollPerPixel)

        self.setLayout(self.hbox)

        self.atCurrentRight = 16
        self.atCurrentLeft = 0

        self.timerBaseInterval = 25
        self.floorInterval = 5

        self.timer = QTimer(self)
        self.timer.setInterval(self.timerBaseInterval)
        self.timer.timeout.connect(self.goRight)

        self.timer2 = QTimer(self)
        self.timer2.setInterval(self.timerBaseInterval)
        self.timer2.timeout.connect(self.goLeft)

        self.rightCounter = 0
        self.leftCounter = 0

        self.incrementalStep = 1
        self.counterSize = 410

        self.lingertime = 1
        self.lingertimeCounter = 0

        self.show()

    #Takes list of images and adds them to the image container of this class
    def setImages(self, images, urls, movieIDs, titles):

        self.list_widget.clear()
        self.items = []
        self.list_widget.setViewMode(QListWidget.IconMode)
        #        self.list_widget.setResizeMode(QListWidget.Adjust);
        #        self.list_widget.setIconSize(QSize(150,150));
        #        self.list_widget.setAcceptDrops(True);
        #        self.list_widget.setDragEnabled(False);
        for i in range(len(images)):
            self.items.append(ClickableThumbnail(urls[i], movieIDs[i]))
            self.items[i].setText(titles[i])

            self.list_widget.addItem(self.items[i])

            pm = QPixmap()
            pm.loadFromData(base64.b64decode(images[i]))
            ic = QIcon()
            pm = pm.scaled(QSize(220, 150), Qt.IgnoreAspectRatio)
            ic.addPixmap(pm)
            if (ic.isNull() == False):
                self.items[i].setIcon(ic)

    #movies images to the right to slide left by initiating a timer that moves the images smoothly by pixels
    def goleftSmooth(self):
        self.timer2.start()
        self.pic.setDisabled(True)
        self.pic2.setDisabled(True)

    #movies images to the left to slide right by initiating a timer that moves the images smoothly by pixels
    def gorightSmooth(self):
        self.timer.start()
        self.pic.setDisabled(True)
        self.pic2.setDisabled(True)

    #Function that timer2 uses to movie images right
    #It works by modifying the timer interval (time needed until this function is called again)
    #starts by high time interval to low then to high (slow fast slow)
    def goLeft(self):
        if (self.leftCounter != self.counterSize):

            if (self.leftCounter < math.ceil(self.counterSize * 0.4)):
                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer2.interval() > self.floorInterval):
                        self.timer2.setInterval(self.timer2.interval() - 1)
                        self.lingertime = self.timerBaseInterval - self.timer2.interval(
                        )
                        self.lingertimeCounter = 5
            elif (self.leftCounter >
                  self.counterSize - math.ceil(self.counterSize * 0.4)):

                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer2.interval() < self.timerBaseInterval):
                        self.timer2.setInterval(self.timer2.interval() + 1)
                        self.lingertime = self.timerBaseInterval - self.timer2.interval(
                        )
                        self.lingertimeCounter = 5

            self.list_widget.horizontalScrollBar().setValue(
                self.list_widget.horizontalScrollBar().value() -
                self.incrementalStep)

            self.leftCounter += 1

            self.repaint()

            if (self.leftCounter == math.ceil(self.counterSize / 2)):
                self.lingertimeCounter = 5
                self.lingertime = self.timerBaseInterval

        else:

            self.timer2.setInterval(self.timerBaseInterval)
            self.leftCounter = 0
            self.timer2.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

        if (self.list_widget.horizontalScrollBar().value() == 0):
            self.timer2.setInterval(self.timerBaseInterval)
            self.leftCounter = 0
            self.timer2.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

    #functions similarly to goLeft but adds scrolls to the right by adding pixels to the scrollbar value rather than subtracting
    #TODO: integrate goleft and goright into 1 function, no need for 2
    def goRight(self):

        #        print(self.timer.interval())
        if (self.rightCounter != self.counterSize):

            if (self.rightCounter < math.ceil(self.counterSize * 0.4)):
                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer.interval() > self.floorInterval):
                        self.timer.setInterval(self.timer.interval() - 1)
                        self.lingertime = self.timerBaseInterval - self.timer.interval(
                        )
                        self.lingertimeCounter = 5
            elif (self.rightCounter >
                  self.counterSize - math.ceil(self.counterSize * 0.4)):

                if (self.lingertime > self.lingertimeCounter):

                    self.lingertimeCounter += 1

                else:
                    if (self.timer.interval() < self.timerBaseInterval):
                        self.timer.setInterval(self.timer.interval() + 1)
                        self.lingertime = self.timerBaseInterval - self.timer.interval(
                        )
                        self.lingertimeCounter = 5

            self.list_widget.horizontalScrollBar().setValue(
                self.list_widget.horizontalScrollBar().value() +
                self.incrementalStep)

            self.rightCounter += 1

            self.repaint()

            if (self.rightCounter == math.ceil(self.counterSize / 2)):
                self.lingertimeCounter = 5
                self.lingertime = self.timerBaseInterval

        else:

            self.timer.setInterval(self.timerBaseInterval)
            self.rightCounter = 0
            self.timer.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)

        if (self.list_widget.horizontalScrollBar().value() ==
                self.list_widget.horizontalScrollBar().maximum()):
            self.timer.setInterval(self.timerBaseInterval)
            self.rightCounter = 0
            self.timer.stop()
            self.pic.setEnabled(True)
            self.pic2.setEnabled(True)