def _setup_ui(self): self._top_layout = QHBoxLayout(self._top_container) self._layout = QVBoxLayout(self) self._cover_label.setMinimumWidth(200) self._left_sub_layout = QVBoxLayout() self._right_sub_layout = QVBoxLayout() self._right_sub_layout.addWidget(self._desc_container) self._right_sub_layout.addWidget(self._toolbar) self._left_sub_layout.addWidget(self._cover_label) self._left_sub_layout.addStretch(0) self._top_layout.addLayout(self._left_sub_layout) self._top_layout.addSpacing(20) self._top_layout.addLayout(self._right_sub_layout) self._top_layout.setStretch(1, 1) self.setAutoFillBackground(False) if use_mac_theme(): self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(0) self._layout.addWidget(self._top_container) self._layout.addWidget(self.songs_table) self._layout.addWidget(self.coll_items_table) # FIXME: 更好的计算宽度和高度 # 目前是假设知道自己初始化高度大约是 530px # 之后可以考虑按比例来计算 self.overview_height = 180 self._top_container.setMaximumHeight(self.overview_height) self._songs_table_height = 530 - self.overview_height self.songs_table.setMinimumHeight(self._songs_table_height) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
def __init__(self, parent=None): super().__init__(parent) self.delegate = SongsTableDelegate(self) self.setItemDelegate(self.delegate) self.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) # FIXME: PyQt5 seg fault # self.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # macOS 的滚动条可以自动隐藏 if not use_mac_theme(): self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) else: self.setFrameShape(QFrame.NoFrame) self.horizontalHeader().setStretchLastSection(True) self.verticalHeader().hide() self.setMouseTracking(True) self.setEditTriggers(QAbstractItemView.SelectedClicked) # self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSelectionMode(QAbstractItemView.ExtendedSelection) #self.setFocusPolicy(Qt.NoFocus) self.setAlternatingRowColors(True) self.setShowGrid(False) self.setDragEnabled(True) self.setDragDropMode(QAbstractItemView.DragOnly) self.activated.connect(self._on_activated)
def __init__(self, parent=None): super().__init__(parent) self.delegate = SongsTableDelegate(self) self.setItemDelegate(self.delegate) self.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) # FIXME: PyQt5 seg fault # self.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) # macOS 的滚动条可以自动隐藏 if use_mac_theme(): self.setFrameShape(QFrame.NoFrame) self.horizontalHeader().setStretchLastSection(True) self.verticalHeader().hide() self.setMouseTracking(True) self.setEditTriggers(QAbstractItemView.SelectedClicked) # self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSelectionMode(QAbstractItemView.ExtendedSelection) #self.setFocusPolicy(Qt.NoFocus) self.setAlternatingRowColors(True) self.setShowGrid(False) self.setDragEnabled(True) self.setDragDropMode(QAbstractItemView.DragOnly) self.activated.connect(self._on_activated)
def __init__(self, app, parent=None): super().__init__(parent) self._app = app self.library_header = QLabel('音乐提供方', self) self.collections_header = QLabel('本地收藏', self) self.collections_header.setToolTip( '我们可以在本地建立『收藏集』来收藏自己喜欢的音乐资源\n\n' '每个收藏集都以一个独立 .fuo 文件的存在,' '将鼠标悬浮在收藏集上,可以查看文件所在路径。\n' '新建 fuo 文件,则可以新建收藏集,文件名即是收藏集的名字。\n\n' '手动编辑 fuo 文件即可编辑收藏集中的音乐资源,也可以在界面上拖拽来增删歌曲。') self.playlists_header = QLabel('歌单列表', self) self.my_music_header = QLabel('我的音乐', self) self.playlists_view = PlaylistsView(self) self.providers_view = ProvidersView(self) self.my_music_view = MyMusicView(self) self.collections_view = CollectionsView(self) self.providers_con = ListViewContainer(self.library_header, self.providers_view) self.collections_con = ListViewContainer(self.collections_header, self.collections_view) self.playlists_con = ListViewContainer(self.playlists_header, self.playlists_view) self.my_music_con = ListViewContainer(self.my_music_header, self.my_music_view) self.providers_view.setModel(self._app.pvd_uimgr.model) self.playlists_view.setModel(self._app.pl_uimgr.model) self.my_music_view.setModel(self._app.mymusic_uimgr.model) self.collections_view.setModel(self._app.coll_uimgr.model) self._layout = QVBoxLayout(self) if use_mac_theme(): self._layout.setSpacing(0) self._layout.setContentsMargins(6, 4, 0, 0) self._layout.addWidget(self.providers_con) self._layout.addWidget(self.collections_con) self._layout.addWidget(self.my_music_con) self._layout.addWidget(self.playlists_con) self._layout.addStretch(0) self.providers_view.setFrameShape(QFrame.NoFrame) self.playlists_view.setFrameShape(QFrame.NoFrame) self.my_music_view.setFrameShape(QFrame.NoFrame) self.collections_view.setFrameShape(QFrame.NoFrame) self.setFrameShape(QFrame.NoFrame) # 让各个音乐库来决定是否显示这些组件 self.playlists_con.hide() self.my_music_con.hide() self.playlists_view.show_playlist.connect( lambda pl: self._app.browser.goto(model=pl)) self.collections_view.show_collection.connect(self.show_coll)
def __init__(self, app, parent=None): super().__init__(parent) self._app = app self.songs_table = SongsTableView(self) self.table_overview = TableOverview(self) self._layout = QVBoxLayout(self) self.setAutoFillBackground(False) if use_mac_theme(): self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(0) self._layout.addWidget(self.table_overview) self._layout.addWidget(self.songs_table) self.songs_table.play_song_needed.connect( lambda song: asyncio.ensure_future(self.play_song(song))) self.songs_table.show_artist_needed.connect( lambda artist: asyncio.ensure_future(self.show_model(artist))) self.songs_table.show_album_needed.connect( lambda album: asyncio.ensure_future(self.show_model(album))) self._cover_pixmap = None self.hide()
def __init__(self, app, parent=None): super().__init__(parent) self._app = app self.library_header = QLabel('音乐库', self) self.collections_header = QLabel('本地收藏 (Beta)', self) self.collections_header.setToolTip( '我们可以在本地建立『收藏集』来收藏自己喜欢的音乐资源\n\n' '每个收藏集都以一个独立 .fuo 文件的存在,' '将鼠标悬浮在收藏集上,可以查看文件所在路径。\n' '新建 fuo 文件,则可以新建收藏集,文件名即是收藏集的名字。\n\n' '手动编辑 fuo 文件即可编辑收藏集中的音乐资源,也可以在界面上拖拽来增删歌曲。' ) self.playlists_header = QLabel('歌单列表', self) self.my_music_header = QLabel('我的音乐', self) class Container(QFrame): def __init__(self, label, view, parent=None): super().__init__(parent) self._layout = QVBoxLayout(self) self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(0) label.setFixedHeight(25) self._layout.addWidget(label) self._layout.addWidget(view) self._layout.addStretch(0) # XXX: 本意是让 Container 下方不要出现多余的空间 self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self.playlists_view = PlaylistsView(self) self.providers_view = ProvidersView(self) self.my_music_view = MyMusicView(self) self.collections_view = CollectionsView(self) self.providers_con = Container(self.library_header, self.providers_view) self.collections_con = Container(self.collections_header, self.collections_view) self.playlists_con = Container(self.playlists_header, self.playlists_view) self.my_music_con = Container(self.my_music_header, self.my_music_view) self.providers_view.setModel(self._app.pvd_uimgr.model) self.playlists_view.setModel(self._app.pl_uimgr.model) self.my_music_view.setModel(self._app.mymusic_uimgr.model) self.collections_view.setModel(self._app.coll_uimgr.model) self._layout = QVBoxLayout(self) if use_mac_theme(): self._layout.setSpacing(0) self._layout.setContentsMargins(6, 4, 0, 0) self._layout.addWidget(self.providers_con) self._layout.addWidget(self.collections_con) self._layout.addWidget(self.my_music_con) self._layout.addWidget(self.playlists_con) self._layout.addStretch(0) self.providers_view.setFrameShape(QFrame.NoFrame) self.playlists_view.setFrameShape(QFrame.NoFrame) self.my_music_view.setFrameShape(QFrame.NoFrame) self.collections_view.setFrameShape(QFrame.NoFrame) self.setFrameShape(QFrame.NoFrame) # 让各个音乐库来决定是否显示这些组件 self.playlists_con.hide() self.my_music_con.hide() self.playlists_view.show_playlist.connect( lambda pl: self._app.browser.goto(model=pl)) self._app.browser.route('/colls/<identifier>')(self.__handle_show_coll) self.collections_view.show_collection.connect(self.show_coll)