示例#1
0
class AnimeIndexWindow(QWidget):

    def __init__(self):
        super().__init__()
        anime_bk_pic_path = './source/pic/anime_bk.png'
        search_1_pic_path = './source/pic/next.png'
        search_2_pic_path = './source/pic/next_1.png'
        search_3_pic_path = './source/pic/next_2.png'
        hgzy_font_path = './source/font/HGZYT_CNKI.TTF'
        rem_ico_path = './source/pic/rem.png'
        self.pix = QPixmap(anime_bk_pic_path)
        self.resize(self.pix.width(),self.pix.height())
        self.pix = self.pix.scaled(int(self.pix.width()), int(self.pix.height()))
        self.setMask(self.pix.mask())
        screen = QDesktopWidget().screenGeometry()
        self.move((screen.width() - self.pix.width()) / 2, (screen.height() - self.pix.height()) / 2)
        self.setWindowFlags(Qt.FramelessWindowHint)  # | QtCore.Qt.WindowStaysOnTopHint
        self.setAttribute(Qt.WA_TranslucentBackground) # 窗口透明抗锯齿
        rem_icon = QIcon(QPixmap(rem_ico_path))
        self.setWindowIcon(rem_icon)
        self.m_DragPosition = None
        fontId = QFontDatabase.addApplicationFont(hgzy_font_path)
        fontName = QFontDatabase.applicationFontFamilies(fontId)[0]
        self.animelist = QDListWidget(self)
        self.animelist.setObjectName('AnimeListWidget')
        self.animelist.setGeometry(17,280,self.pix.width()-34,self.pix.height()-280-50)
        self.animelist.setStyleSheet('#AnimeListWidget{background:transparent;}')
        self.animelist.setFont(QFont(fontName,15,QFont.Light))
        self.animelist.setIconSize(QSize(100,100))
        self.InitData()
        ver = Version()
        self.version = QDLabel(self, ver.cur_link)
        self.version.setObjectName('VersionLabel')
        self.version.setGeometry(15, self.pix.height() - 75, 600, 100)
        self.version.setText('当前数据库版本号:' + ver.cur_version)
        if ver.judge_version():
            self.version.setToolTip('数据库为最新版本,无需更新')
        else:
            self.version.setToolTip('数据库版本已过期,请自行下载新数据库.(双击获取下载链接)')
        self.version.setFont(QFont(fontName,10,QFont.Light))
        self.search = QPushButton(self)
        self.search.setObjectName('Search')
        self.search.setStyleSheet("#Search{border-image: url(%s)}"
                                  "#Search:hover{border-image: url(%s)}" 
                                  "#Search:pressed{border-image: url(%s)}"
                                  % (search_1_pic_path,search_2_pic_path,search_3_pic_path))
        self.search.setGeometry(self.pix.width()-self.search.width(),self.pix.height()-self.search.height()-10
                                ,self.search.width()-20,self.search.height())
        self.choose = Choose(self.x()+self.width(),self.y()+self.height())
        self.choose_show = False
        self.choose_info = {}
        self.search.clicked.connect(self.SearchBt)
        self.detail = Detail(self.x(),self.y())
        self.detail_show = False
        self.animelist.itemDoubleClicked.connect(self.DetailBt)
        self.animelist.installEventFilter(self)
        self.rightclick = Rightclick()
        self.animeshow = False

    def paintEvent(self, event):
        paint = QPainter(self)
        paint.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            if self.choose_show == True:
                self.choose.raise_()
            if self.detail_show == True:
                self.detail.raise_()
            event.accept()
        elif event.button() == Qt.RightButton:
            if self.detail_show == True:
                self.detail.close()
                self.detail_show = False
            if self.choose_show == True:
                self.choose.close()
                self.choose_show = False
            self.hide()
            self.animeshow = False
            event.accept()

    def mouseMoveEvent(self, event):
        if Qt.LeftButton and self.m_drag:
            self.move(event.globalPos() - self.m_DragPosition)
            self.choose.move(self.x() + self.width(), self.y()+self.height()-self.choose.pix.height())
            self.detail.move(self.x()-self.detail.pix.width(),self.y())
            event.accept()

    def mouseReleaseEvent(self, event):
        self.m_drag = False

    def closeEvent(self, event):
        self.detail.close()
        self.detail_show = False
        self.choose.close()
        self.choose_show = False
        self.animeshow = False

    def InitData(self):
        dbsql = AnimeData()
        self.infos = dbsql.SqliteInfoSelect()
        self.animelist.clear()
        if self.infos:
            for info in self.infos:
                self.animelist.addItem(QListWidgetItem(QIcon('./source/pic/bili.png'), info[0]))

    def ChooseData(self):
        self.choose_info = {}
        title = self.choose.titletext.text()
        if title != '':
            self.choose_info['title'] = title
        order = self.choose.ordertext.text()
        if order != '':
            self.choose_info['order'] = int(order)
        index_show = ''
        index_season = self.choose.animecombo_season.currentText()
        index_year = self.choose.timetext.text()
        if index_year != '':
            index_show += index_year + '年'
        if index_season != '不筛选':
            index_show += index_season
        if index_show != '':
            self.choose_info['index_show'] = index_show
        novip = self.choose.animevip.checkState()
        if novip == 1:
            self.choose_info['vip'] = 1
        elif novip == 2:
            self.choose_info['vip'] = 0
        finish = self.choose.animefinish.checkState()
        if finish == 1:
            self.choose_info['finish'] = 0
        elif finish == 2:
            self.choose_info['finish'] = 1
        tags = []
        for i in range(3):
            tag = self.choose.animetags[i].currentText()
            if tag != '不筛选':
                tags.append(tag)
        if tags != []:
            self.choose_info['tag'] = tags

    def ShowData(self):
        dbsql = AnimeData()
        self.infos = dbsql.SqliteInfoSearch(self.choose_info)
        self.animelist.clear()
        if self.infos:
            for info in self.infos:
                self.animelist.addItem(QListWidgetItem(QIcon('./source/pic/bili.png'), info[0]))
        else:
            self.InitData()

    def SearchBt(self):
        if self.choose_show == False:
            self.choose.show()
            self.choose_show = True
        else:
            self.choose.close()
            self.ChooseData()
            self.ShowData()
            self.choose_show = False

    def GetDetail(self,title):
        dbsql = AnimeData()
        infos = dbsql.SqliteInfoSearch({'title':title})
        resinfo = []
        if infos:
            for info in infos:
                resinfo.append(info[0])
                resinfo.append(info[1])
                resinfo.append(info[2])
                resinfo.append(info[3])
                resinfo.append(info[4])
                resinfo.append(info[5])
                resinfo.append(info[6])
                resinfo.append(info[7])
        return resinfo

    def DelDetail(self):
        self.detail.animetitle.setParent(None)
        self.detail.animeintro.setParent(None)
        self.detail.animetags.setParent(None)
        self.detail.animeorder.setParent(None)
        self.detail.animeindexshow.setParent(None)
        self.detail.animeindexshowtext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.animeordertext.setParent(None)
        self.detail.animetitletext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.pic_label.setParent(None)

    def DetailBt(self):
        if self.detail_show == False:
            info = self.GetDetail(self.animelist.currentItem().text())
            self.animelist.index = self.animelist.currentIndex()
            self.detail.setInfo(info)
            self.detail.show()
            self.detail_show = True
        elif self.detail_show == True and self.animelist.index != self.animelist.currentIndex():
            self.detail.close()
            self.DelDetail()
            info = self.GetDetail(self.animelist.currentItem().text())
            self.animelist.index = self.animelist.currentIndex()
            self.detail.setInfo(info)
            self.detail.show()
        else:
            self.detail.close()
            self.DelDetail()
            self.animelist.index = -1
            self.detail_show = False
示例#2
0
class TimelineWindow(QWidget):

    def __init__(self):
        super().__init__()
        timeline_bk_path = './source/pic/timeline_bk.png'
        hgzy_font_path = './source/font/HGZYT_CNKI.TTF'
        rem_ico_path = './source/pic/rem.png'
        fontId = QFontDatabase.addApplicationFont(hgzy_font_path)
        fontName = QFontDatabase.applicationFontFamilies(fontId)[0]
        self.index = -1
        self.pix = QPixmap(timeline_bk_path)
        self.resize(self.pix.width(),self.pix.height())
        self.pix = self.pix.scaled(int(self.pix.width()),int(self.pix.height()))
        self.setMask(self.pix.mask())
        screen = QDesktopWidget().screenGeometry()
        self.move((screen.width() - self.pix.width()) / 2, (screen.height() - self.pix.height()) / 2)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowFlags(Qt.FramelessWindowHint)
        rem_icon = QIcon(QPixmap(rem_ico_path))
        self.setWindowIcon(rem_icon)
        self.m_DragPosition = None
        self.m_drag = False
        self.animelist = QListWidget(self)
        self.animelist.setObjectName('AnimeList')
        self.animelist.setStyleSheet('#AnimeList{background:transparent}')
        self.animelist.setGeometry(200,165,310,350)
        self.animelist.setFont(QFont(fontName,11,QFont.Light))
        self.detail = Detail(self.x()+50,self.y()-15)
        self.detail_show = False
        self.animelist.itemDoubleClicked.connect(self.DetailBt)
        self.TimeLabels_path = []
        self.TimeLabels_clicked_path = []
        self.weekanime = TimeLine().get_week_anime()
        for time in range(1,8):
            self.TimeLabels_path.append('./source/pic/week_day_%d.png' % time)
            self.TimeLabels_clicked_path.append('./source/pic/week_day_%d_clicked.png' % time)
        self.TimeLabels = []
        for time in range(7):
            self.TimeLabels.append(QDlabel(self))
        self.setTimeLabel()
        self.daylabel = QLabel(self)
        self.daylabel.setObjectName('DayLabel')
        self.daylabel.setGeometry(290,110,200,40)
        self.daylabel.setFont(QFont(fontName,13,QFont.Bold))
        self.setDaytext()
        self.timelineshow = False

    def paintEvent(self, event):
        paint = QPainter(self)
        paint.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            if self.detail_show == True:
                self.detail.raise_()
            event.accept()
        elif event.button() == Qt.RightButton:
            if self.detail_show == True:
                self.detail.close()
                self.detail_show = False
            self.hide()
            self.timelineshow = False
            event.accept()

    def mouseMoveEvent(self, event):
        if Qt.LeftButton and self.m_drag:
            self.move(event.globalPos() - self.m_DragPosition)
            self.detail.move(self.x()+50 - self.detail.pix.width(),self.y()-15)
            event.accept()

    def mouseReleaseEvent(self, event):
        self.m_drag = False

    def closeEvent(self, event):
        self.detail.close()
        self.detail_show = False
        self.timelineshow = False

    def setTimeLabel(self):
        label_between = 60
        week_animes = self.weekanime
        start = week_animes[0]['day_of_week']-1
        for time in range(start,start+7):
            time_mod = time % 7
            self.TimeLabels[time_mod].setObjectName('DayLabel%d' % (time_mod+1))
            self.TimeLabels[time_mod].setStyleSheet('#DayLabel%d{border-image:url(%s)}' % (time_mod+1,self.TimeLabels_path[time_mod]))
            self.TimeLabels[time_mod].setGeometry(100,120 + label_between * (time-start),57,24)
        self.labelclick = week_animes[0]['day_of_week']
        self.TimeLabels[self.labelclick-1].setStyleSheet('#DayLabel%d{border-image:url(%s)}'
                                                         % (self.labelclick,self.TimeLabels_clicked_path[self.labelclick-1]))

    def setLabelClick(self, time_n):
        self.TimeLabels[self.labelclick-1].setStyleSheet(
            '#DayLabel%d{border-image:url(%s)}' % (self.labelclick, self.TimeLabels_path[self.labelclick-1]))
        self.TimeLabels[time_n].setStyleSheet('#DayLabel%d{border-image:url(%s)}'
                                                         % (time_n+1,self.TimeLabels_clicked_path[time_n]))

    def setDaytext(self):
        for animes in self.weekanime:
            if animes['day_of_week'] == self.labelclick:
                date = animes['date']
                day_of_week = self.labelclick
                self.animelist.clear()
                for anime in animes['seasons']:
                    item_text = ''
                    if anime['delay'] == 1:
                        item_text += anime['pub_time'] + ' ' + anime['delay_index'] + ' ' + anime['delay_reason'] + '\n' + anime['title']
                    else:
                        item_text += anime['pub_time'] + ' ' + anime['pub_index'] + '\n' + anime['title']
                    self.animelist.addItem(item_text)
                break
        week_day = ['周一','周二','周三','周四','周五','周六','周日']
        daytext = date + ' ' + week_day[day_of_week - 1]
        self.daylabel.setText(daytext)

    def GetDetail(self,title):
        dbsql = AnimeData()
        infos = dbsql.SqliteInfoSearch({'title':title})
        resinfo = []
        if infos:
            for info in infos:
                resinfo.append(info[0])
                resinfo.append(info[1])
                resinfo.append(info[2])
                resinfo.append(info[3])
                resinfo.append(info[4])
                resinfo.append(info[5])
                resinfo.append(info[6])
                resinfo.append(info[7])
        return resinfo

    def DelDetail(self):
        self.detail.animetitle.setParent(None)
        self.detail.animeintro.setParent(None)
        self.detail.animetags.setParent(None)
        self.detail.animeorder.setParent(None)
        self.detail.animeindexshow.setParent(None)
        self.detail.animeindexshowtext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.animeordertext.setParent(None)
        self.detail.animetitletext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.pic_label.setParent(None)

    def DetailBt(self):
        if self.detail_show == False:
            title = self.animelist.currentItem().text().split('\n')[1]
            info = self.GetDetail(title)
            self.detail.setInfo(info)
            self.index = self.animelist.currentIndex()
            self.detail.show()
            self.detail_show = True
        elif self.detail_show == True and self.index != self.animelist.currentIndex():
            self.detail.close()
            self.DelDetail()
            title = self.animelist.currentItem().text().split('\n')[1]
            info = self.GetDetail(title)
            self.index = self.animelist.currentIndex()
            self.detail.setInfo(info)
            self.detail.show()
        else:
            self.detail.close()
            self.DelDetail()
            self.index = -1
            self.detail_show = False