本文整理汇总了Python中PyQt5.QtWidgets.QStackedLayout.setCurrentIndex方法的典型用法代码示例。如果您正苦于以下问题:Python QStackedLayout.setCurrentIndex方法的具体用法?Python QStackedLayout.setCurrentIndex怎么用?Python QStackedLayout.setCurrentIndex使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PyQt5.QtWidgets.QStackedLayout
的用法示例。
在下文中一共展示了QStackedLayout.setCurrentIndex方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: MainWindow
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.actionAuswahl = QComboBox()
self.actionAuswahl.addItem("Einen Sportler bearbeiten")
self.actionAuswahl.addItem("Liste aller Sportler anzeigen")
self.actionAuswahl.addItem("Eine Ergebnissliste bearbeiten")
self.actionAuswahl.addItem("Ergebnisse & Urkunden drucken")
self.actionAuswahl.addItem("Ergebnissvorlagen drucken")
self.actionAuswahl.setEditable(False)
self.actionAuswahl.activated.connect(self.setAction)
self.actionSportlerEdit = SportlerEdit()
self.actionSportlerShow = SportlerShow()
self.actionErgebnissListe = ErgebnissListe()
self.actionErgebnisseDrucken = ErgebnisseDrucken()
self.actionErgebnissVorlage = ErgebnissVorlage()
self.actionLayout = QStackedLayout()
self.actionLayout.addWidget(self.actionSportlerEdit)
self.actionLayout.addWidget(self.actionSportlerShow)
self.actionLayout.addWidget(self.actionErgebnissListe)
self.actionLayout.addWidget(self.actionErgebnisseDrucken)
self.actionLayout.addWidget(self.actionErgebnissVorlage)
self.mainLayout = QVBoxLayout()
self.mainLayout.addWidget(self.actionAuswahl)
self.mainLayout.addStretch(0)
self.mainLayout.addLayout(self.actionLayout)
self.mainLayout.addStretch(0)
self.setLayout(self.mainLayout)
self.show()
def setAction(self,index):
self.actionLayout.setCurrentIndex(index)
self.actionLayout.currentWidget().update()
示例2: _MainContainer
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
if not d.mkdir("ninja-ide"):
self.tdir = None
d.cd("ninja-ide")
return d
def tryMakeImagePreview(self, index):
return
d = self.Successful_Tmp()
if d:
self.makeImagePreview(d, index)
def makeImagePreview(self, _dir, index):
return
path = _dir.absolutePath()+"/screen%s.png" % index
widget = self.stack.widget(index)
pixmap = widget.grab()#widget.rect()
pixmap.save(path)
def _selector_ready(self):
self.stack.setCurrentWidget(self.selector)
self.selector.GoTo_GridPreviews()
def _selector_Close(self):
self.stack.setCurrentWidget(self.splitter)
def _selector_animation_completed(self):
if self._opening_dialog:
# We choose the last one with -2, -1 (for last one) +
# -1 for the hidden selector widget which is in the stacked too.
self.selector.open_item(self.stack.count() - 2)
self._opening_dialog = False
def _change_current_stack(self, index):
self.stack.setCurrentIndex(index)
def _remove_item_from_stack(self, index):
#self.toRemovePreview.emit(index)
widget = self.stack.takeAt(index)
del widget
def show_editor_area(self):
self.stack.setCurrentWidget(self.splitter)
def _files_closed(self):
if settings.SHOW_START_PAGE:
self.show_start_page()
def change_visibility(self):
"""Show/Hide the Main Container area."""
print("change_visibility11")
if self.isVisible():
self.hide()
else:
self.show()
def expand_symbol_combo(self):
self.stack.setCurrentWidget(self.splitter)
self.current_widget.show_combo_symbol()
def expand_file_combo(self):
print("expand_file_combo")
self.stack.setCurrentWidget(self.splitter)
self.current_widget.show_combo_file()
def locate_function(self, function, filePath, isVariable):
"""Move the cursor to the proper position in the navigate stack."""
示例3: SettingsDialog
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class SettingsDialog(QWidget):
"A settings dialog"
scroll_speed_changed = pyqtSignal()
init_gallery_rebuild = pyqtSignal(bool)
init_gallery_eximport = pyqtSignal(object)
def __init__(self, parent=None):
super().__init__(parent, flags=Qt.Window)
self.init_gallery_rebuild.connect(self.accept)
self.parent_widget = parent
self.setAttribute(Qt.WA_DeleteOnClose)
self.resize(700, 500)
self.restore_values()
self.initUI()
self.setWindowTitle('Settings')
self.show()
def initUI(self):
main_layout = QVBoxLayout(self)
sub_layout = QHBoxLayout()
# Left Panel
left_panel = QListWidget()
left_panel.setViewMode(left_panel.ListMode)
#left_panel.setIconSize(QSize(40,40))
left_panel.setTextElideMode(Qt.ElideRight)
left_panel.setMaximumWidth(200)
left_panel.itemClicked.connect(self.change)
#web.setText('Web')
self.application = QListWidgetItem()
self.application.setText('Application')
self.web = QListWidgetItem()
self.web.setText('Web')
self.visual = QListWidgetItem()
self.visual.setText('Visual')
self.advanced = QListWidgetItem()
self.advanced.setText('Advanced')
self.about = QListWidgetItem()
self.about.setText('About')
#main.setIcon(QIcon(os.path.join(app_constants.static_dir, 'plus2.png')))
left_panel.addItem(self.application)
left_panel.addItem(self.web)
left_panel.addItem(self.visual)
left_panel.addItem(self.advanced)
left_panel.addItem(self.about)
left_panel.setMaximumWidth(100)
# right panel
self.right_panel = QStackedLayout()
self.init_right_panel()
# bottom
bottom_layout = QHBoxLayout()
ok_btn = QPushButton('Ok')
ok_btn.clicked.connect(self.accept)
cancel_btn = QPushButton('Cancel')
cancel_btn.clicked.connect(self.close)
info_lbl = QLabel()
info_lbl.setText('<a href="https://github.com/Pewpews/happypanda">'+
'Visit GitHub Repo</a> | Options marked with * requires application restart.')
info_lbl.setTextFormat(Qt.RichText)
info_lbl.setTextInteractionFlags(Qt.TextBrowserInteraction)
info_lbl.setOpenExternalLinks(True)
self.spacer = QWidget()
self.spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
bottom_layout.addWidget(info_lbl, 0, Qt.AlignLeft)
bottom_layout.addWidget(self.spacer)
bottom_layout.addWidget(ok_btn, 0, Qt.AlignRight)
bottom_layout.addWidget(cancel_btn, 0, Qt.AlignRight)
sub_layout.addWidget(left_panel)
sub_layout.addLayout(self.right_panel)
main_layout.addLayout(sub_layout)
main_layout.addLayout(bottom_layout)
self.restore_options()
def change(self, item):
def curr_index(index):
if index != self.right_panel.currentIndex():
self.right_panel.setCurrentIndex(index)
if item == self.application:
curr_index(self.application_index)
elif item == self.web:
curr_index(self.web_index)
elif item == self.visual:
curr_index(self.visual_index)
elif item == self.advanced:
curr_index(self.advanced_index)
elif item == self.about:
curr_index(self.about_index)
def restore_values(self):
#Web
self.exprops = settings.ExProperties()
# Visual
self.high_quality_thumbs = app_constants.HIGH_QUALITY_THUMBS
#.........这里部分代码省略.........
示例4: SettingsDialog
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class SettingsDialog(QWidget):
"A settings dialog"
scroll_speed_changed = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent, flags=Qt.Window)
self.resize(700, 500)
self.show()
self.restore_values()
self.initUI()
def initUI(self):
main_layout = QVBoxLayout()
sub_layout = QHBoxLayout()
# Left Panel
left_panel = QListWidget()
left_panel.setViewMode(left_panel.ListMode)
#left_panel.setIconSize(QSize(40,40))
left_panel.setTextElideMode(Qt.ElideRight)
left_panel.setMaximumWidth(200)
left_panel.itemClicked.connect(self.change)
#web.setText('Web')
self.application = QListWidgetItem()
self.application.setText('Application')
self.web = QListWidgetItem()
self.web.setText('Web')
self.visual = QListWidgetItem()
self.visual.setText('Visual')
self.advanced = QListWidgetItem()
self.advanced.setText('Advanced')
self.about = QListWidgetItem()
self.about.setText('About')
#main.setIcon(QIcon(os.path.join(gui_constants.static_dir, 'plus2.png')))
left_panel.addItem(self.application)
left_panel.addItem(self.web)
left_panel.addItem(self.visual)
left_panel.addItem(self.advanced)
left_panel.addItem(self.about)
left_panel.setMaximumWidth(100)
# right panel
self.right_panel = QStackedLayout()
self.init_right_panel()
# bottom
bottom_layout = QHBoxLayout()
ok_btn = QPushButton('Ok')
ok_btn.clicked.connect(self.accept)
cancel_btn = QPushButton('Cancel')
cancel_btn.clicked.connect(self.close)
info_lbl = QLabel()
info_lbl.setText('<a href="https://github.com/Pewpews/happypanda">'+
'Visit GitHub Repo</a> | Options marked with * requires application restart.')
info_lbl.setTextFormat(Qt.RichText)
info_lbl.setTextInteractionFlags(Qt.TextBrowserInteraction)
info_lbl.setOpenExternalLinks(True)
self.spacer = QWidget()
self.spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
bottom_layout.addWidget(info_lbl, 0, Qt.AlignLeft)
bottom_layout.addWidget(self.spacer)
bottom_layout.addWidget(ok_btn, 0, Qt.AlignRight)
bottom_layout.addWidget(cancel_btn, 0, Qt.AlignRight)
sub_layout.addWidget(left_panel)
sub_layout.addLayout(self.right_panel)
main_layout.addLayout(sub_layout)
main_layout.addLayout(bottom_layout)
self.restore_options()
self.setLayout(main_layout)
self.setWindowTitle('Settings')
def change(self, item):
def curr_index(index):
if index != self.right_panel.currentIndex():
self.right_panel.setCurrentIndex(index)
if item == self.application:
curr_index(self.application_index)
elif item == self.web:
curr_index(self.web_index)
elif item == self.visual:
curr_index(self.visual_index)
elif item == self.advanced:
curr_index(self.advanced_index)
elif item == self.about:
curr_index(self.about_index)
def restore_values(self):
#Web
self.exprops = settings.ExProperties()
# Visual
self.high_quality_thumbs = gui_constants.HIGH_QUALITY_THUMBS
self.popup_width = gui_constants.POPUP_WIDTH
self.popup_height = gui_constants.POPUP_HEIGHT
self.style_sheet = gui_constants.user_stylesheet_path
# Advanced
#.........这里部分代码省略.........
示例5: AppWindow
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
if gui_constants.SEARCH_AUTOCOMPLETE:
completer = QCompleter(self)
completer.setModel(self.manga_list_view.gallery_model)
completer.setCaseSensitivity(Qt.CaseInsensitive)
completer.setCompletionMode(QCompleter.PopupCompletion)
completer.setCompletionRole(Qt.DisplayRole)
completer.setCompletionColumn(gui_constants.TITLE)
completer.setFilterMode(Qt.MatchContains)
self.search_bar.setCompleter(completer)
if gui_constants.SEARCH_ON_ENTER:
self.search_bar.returnPressed.connect(lambda: self.search(self.search_bar.text()))
else:
self.search_bar.textChanged[str].connect(self.search)
self.search_bar.setPlaceholderText("Search title, artist, namespace & tags")
self.search_bar.setMinimumWidth(150)
self.search_bar.setMaximumWidth(500)
self.toolbar.addWidget(self.search_bar)
self.toolbar.addSeparator()
settings_icon = QIcon(gui_constants.SETTINGS_PATH)
settings_action = QAction("Set&tings", self)
settings_action.triggered.connect(self.settings)
self.toolbar.addAction(settings_action)
spacer_end = QWidget() # aligns About action properly
spacer_end.setFixedSize(QSize(10, 1))
self.toolbar.addWidget(spacer_end)
self.addToolBar(self.toolbar)
def toggle_view(self):
"""
Toggles the current display view
"""
if self.display.currentIndex() == self.m_l_view_index:
self.display.setCurrentIndex(self.m_t_view_index)
self.grid_toggle.setIcon(self.grid_toggle_g_icon)
else:
self.display.setCurrentIndex(self.m_l_view_index)
self.grid_toggle.setIcon(self.grid_toggle_l_icon)
# TODO: Improve this so that it adds to the gallery dialog,
# so user can edit data before inserting (make it a choice)
def populate(self, mixed=None):
"Populates the database with gallery from local drive'"
if mixed:
gallery_view = misc.GalleryListView(self, True)
gallery_view.SERIES.connect(self.gallery_populate)
gallery_view.show()
else:
path = QFileDialog.getExistingDirectory(None, "Choose a folder containing your galleries")
self.gallery_populate(path, True)
def gallery_populate(self, path, validate=False):
"Scans the given path for gallery to add into the DB"
if len(path) is not 0:
data_thread = QThread(self)
data_thread.setObjectName("General gallery populate")
loading = misc.Loading(self)
if not loading.ON:
misc.Loading.ON = True
fetch_instance = fetch.Fetch()
fetch_instance.series_path = path
loading.show()
def finished(status):
def hide_loading():
示例6: SideBarWidget
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class SideBarWidget(QFrame):
"""
"""
def __init__(self, parent):
super().__init__(parent)
self.setAcceptDrops(True)
self.parent_widget = parent
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)
self._widget_layout = QHBoxLayout(self)
# widget stuff
self._d_widget = QWidget(self)
self._d_widget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)
self._widget_layout.addWidget(self._d_widget)
self.main_layout = QVBoxLayout(self._d_widget)
self.main_layout.setSpacing(0)
self.main_layout.setContentsMargins(0,0,0,0)
self.arrow_handle = misc.ArrowHandle(self)
self.arrow_handle.CLICKED.connect(self.slide)
self._widget_layout.addWidget(self.arrow_handle)
self.setContentsMargins(0,0,-self.arrow_handle.width(),0)
self.show_all_galleries_btn = QPushButton("Show all galleries")
self.show_all_galleries_btn.clicked.connect(lambda:parent.manga_list_view.sort_model.set_gallery_list())
self.show_all_galleries_btn.clicked.connect(self.show_all_galleries_btn.hide)
self.show_all_galleries_btn.setIcon(app_constants.CROSS_ICON_WH)
self.show_all_galleries_btn.hide()
self.main_layout.addWidget(self.show_all_galleries_btn)
self.main_buttons_layout = QHBoxLayout()
self.main_layout.addLayout(self.main_buttons_layout)
# buttons
bgroup = QButtonGroup(self)
bgroup.setExclusive(True)
self.lists_btn = QPushButton("")
self.lists_btn.setIcon(app_constants.G_LISTS_ICON_WH)
self.lists_btn.setCheckable(True)
bgroup.addButton(self.lists_btn)
self.artist_btn = QPushButton("")
self.artist_btn.setIcon(app_constants.ARTISTS_ICON)
self.artist_btn.setCheckable(True)
bgroup.addButton(self.artist_btn)
self.ns_tags_btn = QPushButton("")
self.ns_tags_btn.setIcon(app_constants.NSTAGS_ICON)
self.ns_tags_btn.setCheckable(True)
bgroup.addButton(self.ns_tags_btn)
self.lists_btn.setChecked(True)
self.main_buttons_layout.addWidget(self.lists_btn)
self.main_buttons_layout.addWidget(self.artist_btn)
self.main_buttons_layout.addWidget(self.ns_tags_btn)
# buttons contents
self.stacked_layout = QStackedLayout()
self.main_layout.addLayout(self.stacked_layout)
# lists
gallery_lists_dummy = QWidget(self)
self.lists = GalleryLists(self)
create_new_list_btn = QPushButton()
create_new_list_btn.setIcon(QIcon(app_constants.PLUS_ICON))
create_new_list_btn.setIconSize(QSize(15, 15))
create_new_list_btn.clicked.connect(lambda: self.lists.create_new_list())
create_new_list_btn.adjustSize()
create_new_list_btn.setFixedSize(create_new_list_btn.width(), create_new_list_btn.height())
create_new_list_btn.setToolTip("Create a new list!")
lists_l = QVBoxLayout(gallery_lists_dummy)
lists_l.setContentsMargins(0,0,0,0)
lists_l.setSpacing(0)
lists_l.addWidget(self.lists)
lists_l.addWidget(create_new_list_btn)
lists_index = self.stacked_layout.addWidget(gallery_lists_dummy)
self.lists.GALLERY_LIST_CLICKED.connect(parent.manga_list_view.sort_model.set_gallery_list)
self.lists.GALLERY_LIST_CLICKED.connect(self.show_all_galleries_btn.show)
self.lists.GALLERY_LIST_REMOVED.connect(self.show_all_galleries_btn.click)
self.lists_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(lists_index))
self.show_all_galleries_btn.clicked.connect(self.lists.clearSelection)
self.show_all_galleries_btn.clicked.connect(self.lists._reset_selected)
# artists
self.artists_list = GalleryArtistsList(parent.manga_list_view.gallery_model, self)
self.artists_list.artist_clicked.connect(lambda a: parent.search('artist:"{}"'.format(a)))
artists_list_index = self.stacked_layout.addWidget(self.artists_list)
self.artist_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(artists_list_index))
#self.lists.GALLERY_LIST_CLICKED.connect(self.artists_list.set_current_glist)
self.show_all_galleries_btn.clicked.connect(self.artists_list.clearSelection)
#self.show_all_galleries_btn.clicked.connect(lambda:self.artists_list.set_current_glist())
# ns_tags
self.tags_tree = TagsTreeView(self)
self.tags_tree.TAG_SEARCH.connect(parent.search)
self.tags_tree.NEW_LIST.connect(self.lists.create_new_list)
self.tags_tree.setHeaderHidden(True)
self.show_all_galleries_btn.clicked.connect(self.tags_tree.clearSelection)
self.tags_layout = QVBoxLayout(self.tags_tree)
ns_tags_index = self.stacked_layout.addWidget(self.tags_tree)
self.ns_tags_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(ns_tags_index))
#.........这里部分代码省略.........
示例7: Preferences
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class Preferences(QDialog):
configuration = {}
weight = 0
# Signals
savePreferences = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent, Qt.Dialog)
self.setWindowTitle(translations.TR_PREFERENCES_TITLE)
self.setMinimumSize(900, 650)
box = QVBoxLayout(self)
box.setContentsMargins(3, 3, 3, 3)
self.setAutoFillBackground(True)
# Header
self._header_label = QLabel("")
header_font = self._header_label.font()
header_font.setBold(True)
header_font.setPointSize(header_font.pointSize() + 4)
self._header_label.setFont(header_font)
hbox = QHBoxLayout()
hbox.setContentsMargins(0, 0, 0, 0)
self.tree = QTreeWidget()
self.tree.header().setHidden(True)
self.tree.setSelectionMode(QTreeWidget.SingleSelection)
self.tree.setAnimated(True)
self.tree.header().setSectionResizeMode(
0, QHeaderView.ResizeToContents)
self.tree.setFixedWidth(200)
hbox.addWidget(self.tree)
self.stacked = QStackedLayout()
header_layout = QVBoxLayout()
header_layout.setContentsMargins(0, 0, 0, 0)
header_layout.addWidget(self._header_label)
header_layout.addLayout(self.stacked)
hbox.addLayout(header_layout)
box.addLayout(hbox)
# Footer buttons
button_box = QDialogButtonBox(
QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
box.addWidget(button_box)
# Connections
button_box.rejected.connect(self.close)
button_box.accepted.connect(self._save_preferences)
self.tree.selectionModel().currentRowChanged.connect(
self._change_current)
self.load_ui()
@pyqtSlot()
def _save_preferences(self):
self.savePreferences.emit()
self.close()
def load_ui(self):
sections = sorted(
Preferences.configuration.keys(),
key=lambda item: Preferences.configuration[item]['weight'])
for section in sections:
text = Preferences.configuration[section]['text']
Widget = Preferences.configuration[section]['widget']
widget = Widget(self)
area = QScrollArea()
area.setWidgetResizable(True)
area.setWidget(widget)
self.stacked.addWidget(area)
index = self.stacked.indexOf(area)
item = QTreeWidgetItem([text])
item.setData(0, Qt.UserRole, index)
self.tree.addTopLevelItem(item)
# Sort Item Children
subcontent = Preferences.configuration[section].get(
'subsections', {})
subsections = sorted(
subcontent.keys(), key=lambda item: subcontent[item]['weight'])
for sub in subsections:
text = subcontent[sub]['text']
Widget = subcontent[sub]['widget']
widget = Widget(self)
area = QScrollArea()
area.setWidgetResizable(True)
area.setWidget(widget)
self.stacked.addWidget(area)
index = self.stacked.indexOf(area)
subitem = QTreeWidgetItem([text])
subitem.setData(0, Qt.UserRole, index)
item.addChild(subitem)
self.tree.expandAll()
self.tree.setCurrentIndex(self.tree.model().index(0, 0))
def _change_current(self):
item = self.tree.currentItem()
index = item.data(0, Qt.UserRole)
#.........这里部分代码省略.........
示例8: Preferences
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class Preferences(QDialog):
#
configuration = {}
weight = 0
#
savePreferences = pyqtSignal()
#
def __init__(self, parent=None):
super(Preferences, self).__init__(parent, Qt.Dialog)
self.setWindowTitle(translations.TR_PREFERENCES_TITLE)
self.setMinimumSize(QSize(900, 600))
vbox = QVBoxLayout(self)
hbox = QHBoxLayout()
vbox.setContentsMargins(0, 0, 5, 5)
hbox.setContentsMargins(0, 0, 0, 0)
#
self.tree = QTreeWidget()
self.tree.header().setHidden(True)
self.tree.setSelectionMode(QTreeWidget.SingleSelection)
self.tree.setAnimated(True)
self.tree.header().setHorizontalScrollMode(
QAbstractItemView.ScrollPerPixel)
self.tree.header().setSectionResizeMode(0, QHeaderView.ResizeToContents)
self.tree.header().setStretchLastSection(False)
self.tree.setFixedWidth(200)
self.stacked = QStackedLayout()
hbox.addWidget(self.tree)
hbox.addLayout(self.stacked)
vbox.addLayout(hbox)
#
hbox_footer = QHBoxLayout()
self._btnSave = QPushButton(translations.TR_SAVE)
self._btnCancel = QPushButton(translations.TR_CANCEL)
hbox_footer.addSpacerItem(QSpacerItem(1, 0, QSizePolicy.Expanding))
hbox_footer.addWidget(self._btnCancel)
hbox_footer.addWidget(self._btnSave)
vbox.addLayout(hbox_footer)
#
self.tree.itemSelectionChanged.connect(self._change_current)
self._btnCancel.clicked['bool'].connect(self.close)
self._btnSave.clicked['bool'].connect(self._save_preferences)
#
self.load_ui()
self.tree.setCurrentItem(self.tree.topLevelItem(0))
#
def _save_preferences(self):
self.savePreferences.emit()
self.close()
#
def load_ui(self):
sections = sorted(
list(Preferences.configuration.keys()),
key=lambda item: Preferences.configuration[item]['weight'])
for section in sections:
text = Preferences.configuration[section]['text']
Widget = Preferences.configuration[section]['widget']
widget = Widget(self)
area = QScrollArea()
area.setWidgetResizable(True)
area.setWidget(widget)
self.stacked.addWidget(area)
index = self.stacked.indexOf(area)
item = QTreeWidgetItem([text])
item.setData(0, Qt.UserRole, index)
self.tree.addTopLevelItem(item)
#
#Sort Item Children
subcontent = Preferences.configuration[section].get(
'subsections', {})
subsections = sorted(list(subcontent.keys()),
key=lambda item: subcontent[item]['weight'])
for sub in subsections:
text = subcontent[sub]['text']
Widget = subcontent[sub]['widget']
widget = Widget(self)
area = QScrollArea()
area.setWidgetResizable(True)
area.setWidget(widget)
self.stacked.addWidget(area)
index = self.stacked.indexOf(area)
subitem = QTreeWidgetItem([text])
subitem.setData(0, Qt.UserRole, index)
item.addChild(subitem)
#
self.tree.expandAll()
#
def _change_current(self):
item = self.tree.currentItem()
index = item.data(0, Qt.UserRole)
self.stacked.setCurrentIndex(index)
#
@classmethod
def register_configuration(cls, section, widget, text, weight=None,
subsection=None):
if weight is None:
Preferences.weight += 1
weight = Preferences.weight
if not subsection:
Preferences.configuration[section] = {'widget': widget,
'weight': weight,
#.........这里部分代码省略.........
示例9: ComboEditor
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
ninjaide = IDE.get_service('ide')
editable = ninjaide.get_or_create_editable(path)
self.add_editor(editable)
self.bar.set_current_by_index(index)
if index == -1:
self.bar.set_current_by_index(0)
def add_image_viewer(self, viewer):
"""Add Image Viewer widget to the UI area"""
self.stacked.addWidget(viewer)
viewer.scaleFactorChanged.connect(
self.bar.image_viewer_controls.update_scale_label)
viewer.imageSizeChanged.connect(
self.bar.image_viewer_controls.update_size_label)
self.bar.add_item(viewer.display_name(), None)
viewer.create_scene()
if not self.bar.isVisible():
self.bar.setVisible(True)
def add_editor(self, neditable, keep_index=False):
"""Add Editor Widget to the UI area."""
if neditable.editor:
if self.__original:
editor = neditable.editor
else:
# editor = neditable.editor.clone()
editor = self._main_container.create_editor_from_editable(
neditable)
neditable.editor.link(editor)
current_index = self.stacked.currentIndex()
new_index = self.stacked.addWidget(editor)
self.stacked.setCurrentIndex(new_index)
self.bar.add_item(neditable.display_name, neditable)
# Bar is not visible because all the files have been closed,
# so if a new file is opened, show the bar
if not self.bar.isVisible():
self.bar.setVisible(True)
if keep_index:
self.bar.set_current_by_index(current_index)
# Connections
neditable.fileClosing.connect(self._close_file)
neditable.fileSaved.connect(self._update_symbols)
editor.editorFocusObtained.connect(self._editor_with_focus)
editor.modificationChanged.connect(self._editor_modified)
editor.cursor_position_changed[int, int].connect(
self._update_cursor_position)
editor.current_line_changed[int].connect(self._set_current_symbol)
if neditable._swap_file.dirty:
self._editor_modified(True, sender=editor)
neditable.checkersUpdated.connect(self._show_notification_icon)
# Connect file system signals only in the original
if self.__original:
neditable.askForSaveFileClosing.connect(self._ask_for_save)
neditable.fileChanged.connect(self._file_has_been_modified)
# Load Symbols
self._load_symbols(neditable)
def show_combo_file(self):
self.bar.combo.showPopup()
def show_combo_symbol(self):
self.bar.symbols_combo.showPopup()
示例10: ComboEditor
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
neditable.nfile.close(force_close=True)
elif val == QMessageBox.Yes:
neditable.ignore_checkers = True
self._main_container.save_file(neditable.editor)
neditable.nfile.close()
def _file_has_been_modified(self, neditable):
val = QMessageBox.No
fileName = neditable.file_path
val = QMessageBox.question(
self, translations.TR_FILE_HAS_BEEN_MODIFIED,
"%s%s" % (fileName, translations.TR_FILE_MODIFIED_OUTSIDE),
QMessageBox.Yes | QMessageBox.No)
if val == QMessageBox.Yes:
neditable.reload_file()
def _run_file(self, path):
self._main_container.run_file(path)
def _add_to_project(self, path):
self._main_container._add_to_project(path)
def _show_file_in_explorer(self, path):
'''Connected to ActionBar's showFileInExplorer(QString)
signal, forwards the file path on to the main container.'''
self._main_container._show_file_in_explorer(path)
def set_current(self, neditable):
if neditable:
self.bar.set_current_file(neditable)
def _set_current(self, neditable, index):
if neditable:
self.stacked.setCurrentIndex(index)
editor = self.stacked.currentWidget()
self._update_cursor_position(ignore_sender=True)
editor.setFocus()
self._main_container.current_editor_changed(
neditable.file_path)
self._load_symbols(neditable)
self._show_file_in_explorer(neditable.file_path)
neditable.update_checkers_display()
def widget(self, index):
return self.stacked.widget(index)
def count(self):
"""Return the number of editors opened."""
return self.stacked.count()
def _update_cursor_position(self, line=0, col=0, ignore_sender=False):
obj = self.sender()
editor = self.stacked.currentWidget()
# Check if it's current to avoid signals from other splits.
if ignore_sender or editor == obj:
line += 1
self.bar.update_line_col(line, col)
def _set_current_symbol(self, line, ignore_sender=False):
obj = self.sender()
editor = self.stacked.currentWidget()
# Check if it's current to avoid signals from other splits.
if ignore_sender or editor == obj:
index = bisect.bisect(self._symbols_index, line)
if (index >= len(self._symbols_index) or
self._symbols_index[index] > (line + 1)):
示例11: _MainContainer
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
self.stack.setCurrentWidget(self.splitter)
editor_widget.setFocus()
return editor_widget
def create_editor_from_editable(self, editable):
neditor = editor.create_editor(editable)
neditor.zoomChanged.connect(self._on_zoom_changed)
neditor.addBackItemNavigation.connect(self.add_back_item_navigation)
editable.fileSaved.connect(
lambda neditable: self._explore_file_code(neditable.file_path))
return neditor
def add_back_item_navigation(self):
editor_widget = self.get_current_editor()
if editor_widget is not None:
item = (editor_widget.file_path, editor_widget.cursor_position)
if item not in self.__code_back:
self.__code_back.append(item)
# self.__code_forward.clear()
def _on_zoom_changed(self, zoom):
text = "Zoom: {}%".format(str(zoom))
ide = IDE.get_service("ide")
ide.show_message(text)
def add_widget(self, widget):
self.stack.addWidget(widget)
def show_start_page(self):
"""Show Start Page widget in main container"""
startp = self.stack.widget(0)
if isinstance(startp, start_page.StartPage):
self.stack.setCurrentIndex(0)
else:
startp = start_page.StartPage(parent=self)
startp.newFile.connect(self.add_editor)
self.stack.insertWidget(0, startp)
self.stack.setCurrentIndex(0)
def _files_closed(self):
if settings.SHOW_START_PAGE:
self.show_start_page()
def add_status_bar(self, status_bar):
self._vbox.addWidget(status_bar)
def create_file(self, base_path, project_path):
self._add_file_folder.create_file(base_path, project_path)
def create_folder(self, base_path, project_path):
self._add_file_folder.create_folder(base_path, project_path)
def restyle_editor(self):
neditables = self.combo_area.bar.get_editables()
for neditable in neditables:
neditable.editor.restyle()
def zoom_in_editor(self):
"""Increase the font size in the current editor"""
editor_widget = self.get_current_editor()
if editor_widget is not None:
editor_widget.zoom(1.)
def zoom_out_editor(self):
示例12: ProjectTreeColumn
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
QMessageBox.information(
self,
translations.TR_INVALID_FILENAME,
translations.TR_INVALID_FILENAME_ENTER_A_FILENAME)
return
else:
name = file_manager.get_basename(editorWidget.file_path)
new_path = file_manager.create_path(
_add_to_project.path_selected, name)
ide_srv = IDE.get_service("ide")
old_file = ide_srv.get_or_create_nfile(path)
new_file = old_file.save(editorWidget.text(), new_path)
# FIXME: Make this file replace the original in the open tab
else:
pass
# Message about no project
def _show_file_in_explorer(self, path):
'''Iterate through the list of available projects and show
the current file in the explorer view for the first
project that contains it (i.e. if the same file is
included in multiple open projects, the path will be
expanded for the first project only).
Note: This slot is connected to the main container's
"showFileInExplorer(QString)" signal.'''
central = IDE.get_service('central_container')
if central and not central.is_lateral_panel_visible():
return
for project in self.projects:
index = project.model().index(path)
if index.isValid():
# This highlights the index in the tree for us
project.scrollTo(index, QAbstractItemView.EnsureVisible)
project.setCurrentIndex(index)
break
def add_project(self, project):
if project not in self.projects:
self._combo_project.addItem(project.name)
tooltip = utils.path_with_tilde_homepath(project.path)
self._combo_project.setToolTip(tooltip)
index = self._combo_project.count() - 1
self._combo_project.setItemData(index, project)
ptree = TreeProjectsWidget(project)
self._projects_area.addWidget(ptree)
ptree.closeProject['PyQt_PyObject'].connect(self._close_project)
pmodel = project.model
ptree.setModel(pmodel)
pindex = pmodel.index(pmodel.rootPath())
ptree.setRootIndex(pindex)
self.projects.append(ptree)
self._projects_area.setCurrentWidget(ptree) # Can be empty widget
self._combo_project.setCurrentIndex(index)
# FIXME: improve?
# if len(self.projects) == 1:
# self._combo_project.currentIndexChanged[int].connect(
# self._change_current_project)
def _close_project(self, widget):
"""Close the project related to the tree widget."""
index = self._combo_project.currentIndex()
self.projects.remove(widget)
# index + 1 is necessary because the widget
# with index 0 is the empty widget
self._projects_area.takeAt(index + 1)
示例13: MainWindow
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class MainWindow(QWidget):
"""
Root widget for application.
Handles signals.
"""
def __init__(self, items):
"""
Init gui.
Connect signals.
Create layout.
"""
super().__init__()
self.items = items
self.user = None
self.communication = Communication()
self.frames_layout = QStackedLayout()
self.data_frame_index = None
self.top_system_frame_height = 0
self._init_gui()
self._set_shortcuts()
def _init_gui(self):
self._set_sys_attributes()
self._create_layout()
self.communication.menu_btn_clicked.connect(self.menu_btn_clicked)
self.show()
self._first_start_check()
def _first_start_check(self):
def _import_templates(value):
if value:
from app.model import template
template.Template.import_(options.INIT_TEMPLATES_PATH)
self.show_message('Готово!')
db.KeyValue(key=options.FIRST_START_KEY, value='').save()
try:
first_time = db.KeyValue.get(key=options.FIRST_START_KEY).value
except (exc.NoResultFound, AttributeError):
first_time = True
if first_time:
self.create_alert(options.FIRST_START_WELCOME_TEXT, _import_templates)
def _create_layout(self):
"""
Add TopFrame and main frames.
"""
MessageWidget(self)
vbox = QVBoxLayout()
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
self.setLayout(vbox)
ActionButton(self)
vbox.addWidget(TopFrame(self, self.items), stretch=15)
vbox.addLayout(self.frames_layout, stretch=40)
self._add_frames()
self.show()
def _add_frames(self):
"""
Add frames to stacked layout.
"""
frames = [
DataWidget(self, self.items),
TemplateWidget(self, self.items),
DBWidget(self),
OptionsWidget(self, self.items),
UsersWidget(self),
]
for i, frame in enumerate(frames):
if isinstance(frame, DataWidget):
self.data_frame_index = i
if isinstance(frame, UsersWidget):
self.user_frame_index = i
self.frames_layout.addWidget(frame)
self.frames_layout.setCurrentIndex(len(frames) - 1)
def _set_sys_attributes(self):
"""
Set sys attributes like window titile.
Disable OS-specific buttons.
Remove borders.
"""
self.setWindowFlags(Qt.FramelessWindowHint)
self.setWindowTitle('Hospital Helper')
dw = QDesktopWidget()
w = min(1300, dw.geometry().size().width() * 0.75)
#.........这里部分代码省略.........
示例14: ProjectTreeColumn
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
#.........这里部分代码省略.........
if not name:
QMessageBox.information(
self,
translations.TR_INVALID_FILENAME,
translations.TR_INVALID_FILENAME_ENTER_A_FILENAME)
return
else:
name = file_manager.get_basename(editorWidget.file_path)
new_path = file_manager.create_path(addToProject.pathSelected, name)
ide_srv = IDE.get_service("ide")
old_file = ide_srv.get_or_create_nfile(path)
new_file = old_file.save(editorWidget.text(), new_path)
#FIXME: Make this file replace the original in the open tab
else:
pass
# Message about no project
def _show_file_in_explorer(self, path):
'''Iterate through the list of available projects and show
the current file in the explorer view for the first
project that contains it (i.e. if the same file is
included in multiple open projects, the path will be
expanded for the first project only).
Note: This slot is connected to the main container's
"showFileInExplorer(QString)" signal.'''
central = IDE.get_service('central_container')
if central and not central.is_lateral_panel_visible():
return
for project in self.projects:
index = project.model().index(path)
if index.isValid():
# This highlights the index in the tree for us
project.scrollTo(index, QAbstractItemView.EnsureVisible)
project.setCurrentIndex(index)
break
def add_project(self, project):
if project not in self.projects:
self._combo_project.addItem(project.name)
ptree = TreeProjectsWidget(project)
self._projects_area.addWidget(ptree)
ptree.closeProject.connect(self._close_project)
print("project", project)#setRootPath
pmodel = project.model
ptree.setModel(pmodel)
pindex = pmodel.index(pmodel.rootPath())
ptree.setRootIndex(pindex)
self.projects.append(ptree)
current_index = self._projects_area.count()
self._projects_area.setCurrentIndex(current_index - 1)
self._combo_project.setCurrentIndex(current_index - 1)
def _close_project(self, widget):
"""Close the project related to the tree widget."""
index = self._projects_area.currentIndex()
self.projects.remove(widget)
self._projects_area.takeAt(index)
self._combo_project.removeItem(index)
index = self._combo_project.currentIndex()
self._projects_area.setCurrentIndex(index)
ninjaide = IDE.getInstance()
ninjaide.filesystem.close_project(widget.project.path)
widget.deleteLater()
if len(self.projects) > 1:
title = "%s (%s)" % (
translations.TR_TAB_PROJECTS, len(self.projects))
示例15: TaskWidget
# 需要导入模块: from PyQt5.QtWidgets import QStackedLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QStackedLayout import setCurrentIndex [as 别名]
class TaskWidget(QWidget):
taskModified = pyqtSignal(tasklib.Task)
taskDeleted = pyqtSignal(tasklib.Task)
taskCreated = pyqtSignal(tasklib.Task)
def __init__(self, parent, task, new=False):
QWidget.__init__(self, parent)
self.task = task
self.new = new
self.layout = QStackedLayout(self)
self.label = QLabel(self)
self.label.setTextFormat(Qt.RichText)
self.label.setOpenExternalLinks(True)
self._update()
self.label.setWordWrap(True)
self.layout.addWidget(self.label)
self.editor = TaskEditorLineEdit(self, parent.mfile)
self.layout.addWidget(self.editor)
self.setLayout(self.layout)
self.layout.setCurrentIndex(0)
self.editor.focusOut.connect(self.editFinished)
self.task.modified.connect(self._update)
def sizeHint(self):
new_height = self.label.heightForWidth(self.parent().size().width())
new_height += 10
return QSize(self.parent().size().width(), new_height)
def edit(self):
self.editor.setText(self.task.text)
self.layout.setCurrentIndex(1)
self.editor.setFocus()
def editFinished(self):
# qt bug, this method may be called several times for one edit
self.layout.setCurrentIndex(0)
text = self.editor.text()
if not text:
self.taskDeleted.emit(self.task)
elif self.new:
self.task.text = text
self.new = False
self.taskCreated.emit(self.task)
elif text != self.task.text:
self.task.text = text
self.taskModified.emit(self)
self.parent().setFocus()
def _update(self):
self.label.setText(self.task.toHtml())
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
self.editor.setText(self.task.text)
self.layout.setCurrentIndex(0)
self.parent().setFocus()
return
elif event.key() in (Qt.Key_Enter, Qt.Key_Return):
self.editFinished()
return
QWidget.keyPressEvent(self, event)