class Ui_Form(QWidget): def __init__(self): super(Ui_Form, self).__init__() self.setupUI(self) def setupUi(self, Form): Form.setObjectName("Form") Form.resize(400, 300) self.horizontalLayout_2 = QHBoxLayout(Form) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.PrintHam = QPushButton(Form) self.PrintHam.setObjectName("PrintHam") self.horizontalLayout.addWidget(self.PrintHam) self.horizontalLayout_2.addLayout(self.horizontalLayout) self.retranslateUi(Form) QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Super Ham")) self.PrintHam.setText(_translate("Form", "Print Ham")) self.PrintHam.clicked.connect(self.PrintHam) def PrintHam(self): print "Ham"
def createStatistics(self, last): from PyQt5.QtWidgets import QGridLayout, QHBoxLayout, QVBoxLayout from PyQt5.QtCore import Qt gLayout = QGridLayout() horizontalLayout = QHBoxLayout() horizontalLayout.setObjectName("horizontalLayout") verticalLayout = QVBoxLayout() verticalLayout.setObjectName("verticalLayout") verticalLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) verticalLayout.setContentsMargins(10, 20, 0, 0) horizontalLayout.addLayout(verticalLayout) image_package = self.createImage( os.path.join('/usr/share/ubiquity-system-addons', 'statistics.svg')) self.statistics_name_package = self.createName( _(self.translations['statisticsname'])) self.statistics_description_package = self.createDescription( _(self.translations['statisticsdescription'])) install_package = self.createCheck('statistics') verticalLayout.addWidget(self.statistics_name_package) verticalLayout.addWidget(self.statistics_description_package) horizontalLayout.addWidget(install_package) gLayout.addWidget(image_package, 0, 0) gLayout.addLayout(horizontalLayout, 0, 1) if not last: gLayout.addLayout(self.add_line(), 1, 1) return gLayout
class LowestAvailableSegment(Segment): name = 'Lowest available space positioner' def init_controls(self): """Add all controls needed for a given meristem to be set up.""" self.controls = QHBoxLayout() self.controls.setObjectName('controls') spacerItem = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Fixed) self.controls.addItem(spacerItem) self.controls.addWidget(self.make_label('buds_to_add_label', 'buds to add:')) self.to_add_input = self.text_line('buds_to_add', 120) self.controls.addWidget(self.to_add_input) self.controls.addWidget(self.make_label('size_label', 'bud size (as fraction of R), min 0.75:')) self.bud_size = self.text_line('bud_size', 3) self.controls.addWidget(self.bud_size) self.main_box.addLayout(self.controls) def positioner(self, start_angle, start_height, front): """Get a positioner for the current settings.""" return self.positioner_class( start_size=float(self.bud_size.text() or 0), start_angle=start_angle, start_height=start_height, front=front, )
class VariableLowestAvailableSegment(LowestAvailableSegment): name = 'Variable lowest available space positioner' def init_controls(self): """Add all controls needed for a given meristem to be set up.""" super().init_controls() self.controls2 = QHBoxLayout() self.controls2.setObjectName('controls2') spacerItem = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Fixed) self.controls2.addItem(spacerItem) self.controls2.addWidget(self.make_label('random_variation', 'random (%):')) self.random = self.text_line('set_random', 0, 35) self.controls2.addWidget(self.random) self.controls2.addWidget(self.make_label('delta', 'decrease by (%):')) self.delta = self.text_line('set_delta', 1) self.controls2.addWidget(self.delta) self.main_box.addLayout(self.controls2) def positioner(self, start_angle, start_height, front): """Get a positioner for the current settings.""" return self.positioner_class( random=int(round(float(self.random.text() or 0))), delta=float(self.delta.text() or 0)/100, start_size=float(self.bud_size.text() or 0), start_angle=start_angle, start_height=start_height, front=front, )
def addFilter(self): self.vbox = QVBoxLayout() self.vbox.setObjectName("vbox_" + self.currentFilterName) for field in self.fields: hbox = QHBoxLayout() hbox.setObjectName(self.currentFilterName) # Dodaj QLabel o danej nazwie obiektu label = QLabel(str(field[0])) label.width=200 label.height=30 label.maximumHeight=30 label.maximumWidth=200 hbox.addWidget(label) hbox.addWidget(QLineEdit()) self.vbox.addStretch(1) self.vbox.addLayout(hbox) self.vert_tab.addLayout(self.vbox) self.update()
class RelationListTab(QWidget): dbhelper = None def __init__(self, dbhelper, *args): super(RelationListTab, self).__init__(*args) Lumberjack.info('spawning a << RelationListTab >>') self.dbhelper = dbhelper self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") model = AlchemicalTableModel( self.dbhelper.get_app_db_session(), Relation, [('Name', Relation.name, 'name', {}), ('Full Name', Relation.fullname, 'fullname', {}), ('Reference', Relation.reference, 'reference', {}), ('Bank account', Relation.bank_account, 'bank_account', {}), ('Relation type', Relation.relation_type, 'relation_type.relation', {}), ('Date created', Relation.date_created, 'date_created', {})]) self.tableView = MyTableView() self.tableView.setModel(model) self.form = RelationForm(model, self.dbhelper) selectionModel = self.tableView.selectionModel() selectionModel.selectionChanged.connect(self.form.set_mapper_index_from_selection) self.horizontalLayout.addWidget(self.form) self.horizontalLayout.addWidget(self.tableView) self.setLayout(self.horizontalLayout)
class DecreasingRingSegment(RingSegment): name = 'Decreasing ring positioner' def init_controls(self): """Add all controls needed for a given meristem to be set up.""" super().init_controls() self.controls2 = QHBoxLayout() self.controls2.setObjectName('controls2') spacerItem = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Fixed) self.controls2.addItem(spacerItem) self.controls2.addWidget(self.make_label('delta_label', 'decrease by (%):')) self.delta = self.text_line('set_delta', 10, 35) self.controls2.addWidget(self.delta) self.controls2.addWidget(self.make_label('z_scale_label', 'scale radius:')) self.scale_radius = self.checkbox('scale_radius') self.controls2.addWidget(self.scale_radius) self.main_box.addLayout(self.controls2) def positioner(self, start_angle, start_height, front): """Get a positioner for the current settings.""" return self.positioner_class( math.radians(float(self.angle.text() or 0)), int(self.per_ring.text() or 0), scale=float(self.delta.text() or 0.0), scale_radius=self.scale_radius.isChecked(), start_angle=start_angle, start_height=start_height, )
class UserListTab(QWidget): dbhelper = None def __init__(self, dbhelper, *args): super(UserListTab, self).__init__(*args) self.dbhelper = dbhelper self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") model = AlchemicalTableModel( self.dbhelper.get_app_db_session(), User, [('Name', User.name, 'name', {}), ('Full Name', User.fullname, 'fullname', {}), ('Password', User.password, 'password', {}), ('Date created', User.date_created, 'date_created', {})]) self.tableView = MyTableView() self.tableView.setModel(model) self.form = UserForm(model, self.dbhelper) selectionModel = self.tableView.selectionModel() selectionModel.selectionChanged.connect(self.form.set_mapper_index_from_selection) self.horizontalLayout.addWidget(self.form) self.horizontalLayout.addWidget(self.tableView) self.setLayout(self.horizontalLayout)
def createClassicLayout(self, last): from PyQt5.QtWidgets import QGridLayout, QHBoxLayout, QVBoxLayout from PyQt5.QtCore import Qt gLayout = QGridLayout() horizontalLayout = QHBoxLayout() horizontalLayout.setObjectName("horizontalLayout") verticalLayout = QVBoxLayout() verticalLayout.setObjectName("verticalLayout") verticalLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) verticalLayout.setContentsMargins(10, 20, 0, 0) horizontalLayout.addLayout(verticalLayout) image_package = self.createImage( '/usr/share/plasma/look-and-feel/lliurex-desktop-classic/contents/previews/preview.png' ) self.classic_name = self.createName( _(self.translations['classiclayout'])) self.classic_description = self.createDescription( _(self.translations['classiclayoutdescription'])) classic_check = self.createRadio('classic', False) verticalLayout.addWidget(self.classic_name) verticalLayout.addWidget(self.classic_description) horizontalLayout.addWidget(classic_check) gLayout.addWidget(image_package, 0, 0) gLayout.addLayout(horizontalLayout, 0, 1) return gLayout
class Ui_ConsoleWidget(object): def setupUi(self, ConsoleWidget): ConsoleWidget.setObjectName("ConsoleWidget") ConsoleWidget.resize(400, 300) self.dockWidgetContents = QWidget() self.dockWidgetContents.setObjectName("dockWidgetContents") self.horizontalLayout = QHBoxLayout(self.dockWidgetContents) self.horizontalLayout.setContentsMargins(2, 2, 2, 2) self.horizontalLayout.setObjectName("horizontalLayout") self.listwidget_ouput = QListWidget(self.dockWidgetContents) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.listwidget_ouput.sizePolicy().hasHeightForWidth()) self.listwidget_ouput.setSizePolicy(sizePolicy) self.listwidget_ouput.setObjectName("listwidget_ouput") self.horizontalLayout.addWidget(self.listwidget_ouput) self.ok_button = QPushButton(self.dockWidgetContents) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.ok_button.sizePolicy().hasHeightForWidth()) self.ok_button.setSizePolicy(sizePolicy) self.ok_button.setObjectName("ok_button") self.horizontalLayout.addWidget(self.ok_button) ConsoleWidget.setWidget(self.dockWidgetContents) self.retranslateUi(ConsoleWidget) QMetaObject.connectSlotsByName(ConsoleWidget) def retranslateUi(self, ConsoleWidget): _translate = QCoreApplication.translate ConsoleWidget.setWindowTitle(_translate("ConsoleWidget", "DockWidget")) self.ok_button.setText(_translate("ConsoleWidget", "확인"))
class AddAppWidget(QWidget): def __init__(self, parent, name, description) -> None: super().__init__(parent) self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setContentsMargins(0, 0, 0, 0) _translate = QCoreApplication.translate img_name = name name_part = name.split('/') if len(name_part) > 1: img_name = name_part[1] self.pic = AppAvatar(text_utils.getSimpleName(img_name), parent=self) self.horizontalLayout.addWidget(self.pic) self.infoWidget = QWidget(self) self.infoWidget.setObjectName("infoWidget") self.infoLayout = QVBoxLayout(self.infoWidget) self.infoLayout.setContentsMargins(5, 0, 0, 0) self.name = QLabel(self) self.name.setObjectName("name") self.infoLayout.addWidget(self.name) if len(description) > 0: self.description = QLabel(self) self.description.setWordWrap(True) self.description.setObjectName("description") self.description.setText(_translate("widget", description)) self.infoLayout.addWidget(self.description) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(2) self.infoWidget.setSizePolicy(sizePolicy) self.horizontalLayout.addWidget(self.infoWidget) self.fromRepo = QLabel(self) font = QFont() font.setBold(True) font.setWeight(75) self.fromRepo.setFont(font) self.fromRepo.setObjectName("fromRepo") self.horizontalLayout.addWidget(self.fromRepo) self.install = QPushButton(self) self.install.setObjectName("install") self.horizontalLayout.addWidget(self.install) self.fromRepo.setText(_translate("widget", "From Dockerhub")) self.install.setText(_translate("widget", "Install")) self.name.setText(_translate("widget", name)) QMetaObject.connectSlotsByName(self) @pyqtSlot(bool, name='on_install_clicked') def installApp(self, checked): containers_service.install_container(self.name.text(), self.description.text())
class StarBox: def __init__(self): super(StarBox, self).__init__() def create_star(self, card_containers: QFrame, count_star_type1: int, count_star_type2: int, star_type: bool = True): """this method create star rate box Arguments: card_containers {QFrame} -- [this argument parent layout] count_star_type1 {int} -- [this argument count star yellow in box] count_star_type2 {int} -- [this argument count star yellow in box] """ self.frame_star_group = QFrame(card_containers) self.frame_star_group.setGeometry(QRect(25, 105, 91, 24)) self.frame_star_group.setObjectName( StarBoxStyles.frame_star_group_style[0]) self.frame_star_group.setStyleSheet( StarBoxStyles.frame_star_group_style[1]) self.hl_frame_star_group = QHBoxLayout(self.frame_star_group) self.hl_frame_star_group.setContentsMargins(0, 0, 0, 0) self.hl_frame_star_group.setSpacing(0) self.hl_frame_star_group.setObjectName("hl_frame_star_group") path_star_type_1: str = [ AppPaths.GUI_ASSETS_ICONS_PATH + "/main_window/star-yellow-logo.svg" if star_type else AppPaths.GUI_ASSETS_ICONS_PATH + "/main_window/star-white-logo.svg" ][0] path_star_type_2: str = [ AppPaths.GUI_ASSETS_ICONS_PATH + "/main_window/star-gray.svg" if star_type else AppPaths.GUI_ASSETS_ICONS_PATH + "/main_window/star-gray-yellow.svg" ][0] for yellow_star in range(count_star_type1): self.pic_star_type1 = QLabel(self.frame_star_group) self.pic_star_type1.setObjectName(StarBoxStyles.stars_style[0]) self.pic_star_type1.setStyleSheet(StarBoxStyles.stars_style[1]) self.pic_star_type1.setPixmap(QPixmap(path_star_type_1)) self.hl_frame_star_group.addWidget(self.pic_star_type1) for gray_star in range(count_star_type2): self.pic_star_type2 = QLabel(self.frame_star_group) self.pic_star_type2.setObjectName(StarBoxStyles.stars_style[0]) self.pic_star_type2.setStyleSheet(StarBoxStyles.stars_style[1]) self.pic_star_type2.setPixmap(QPixmap(path_star_type_2)) self.hl_frame_star_group.addWidget(self.pic_star_type2)
class SidebarWidget(QFrame): def __init__(self, parent=None): super().__init__(parent=parent) self.plus = QPushButton() self.search = QLineEdit() self.products_layout = QVBoxLayout() self.header = QHBoxLayout() self.title = QLabel() self.layout = QVBoxLayout() self.products = QWidget() self.scroll = QScrollArea() self.initUI() def initUI(self): self.title.setObjectName('sidebar_title') self.title.setText('Товары') self.plus.setObjectName('plus') self.plus.setText('+') self.header.setContentsMargins(0, 0, 0, 17) self.header.setSpacing(0) self.header.addWidget(self.title) self.header.addStretch(1) self.header.addWidget(self.plus, 0) self.header.setObjectName('header') self.search.setObjectName('search') self.search.setPlaceholderText('Поиск...') self.layout.setContentsMargins(10, 15, 10, 0) self.layout.setSpacing(0) self.layout.addLayout(self.header) self.layout.addWidget(self.search) self.products_layout.setContentsMargins(0, 0, 0, 0) self.products_layout.setSpacing(0) self.products.setLayout(self.products_layout) self.scroll.setWidgetResizable(True) self.scroll.setWidget(self.products) self.layout.addWidget(self.scroll) self.products_layout.addStretch(1) self.setFixedWidth(300) self.setLayout(self.layout) self.setObjectName('sidebar') load_fonts() self.setStyleSheet(get_styles('style') + get_styles('sidebar'))
class MenuBar(QTabWidget): def __init__(self, parent=None): super(MenuBar, self).__init__(parent) tabbar = TabBar(parent) self.setTabBar(tabbar) self.setMinimumHeight(135) self.setMouseTracking(True) self._drop = False self.currentChanged.connect(self.currentChangedFunc) def currentChangedFunc(self, index): tab_text = self.tabText(index) menu = self.findChild(MenuWidget, tab_text) self.anim = QPropertyAnimation(menu, b'_height') self.anim.setDuration(100) self.anim.setStartValue(0) self.anim.setEndValue(100) self.anim.start() def addMenu(self, p_str): p_str = " {p_str} ".format(p_str=p_str) menu = MenuWidget() menu.setObjectName(p_str) self.addTab(menu, p_str) self.hlayout = QHBoxLayout(menu) self.hlayout.setObjectName(p_str) self.hlayout.setContentsMargins(0, 0, 0, 0) self.hlayout.setSpacing(0) hs = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.hlayout.addItem(hs) return (menu) def addGroup(self, p_str, menu): group = GroupWidget(p_str, menu) group.setObjectName('group') insert_index = len(menu.findChildren(GroupWidget, 'group')) - 1 self.hlayout.insertWidget(insert_index, group) return (group) def listGroups(self, menu): self.group_list = [] for i in range(self.hlayout.count()): try: w = self.hlayout.itemAt(i).widget() self.group_list.append(w._title) except: AttributeError return (self.group_list) def addSliderChoiceWidget(self, menu): slider_choice = SliderChoiceWidget() insert_index = len(menu.findChildren(GroupWidget, 'group')) self.hlayout.insertWidget(insert_index, slider_choice) return (slider_choice)
class DockWidgetBase(QDockWidget): def __init__(self, main_window: QMainWindow): """ QDockWidget 基类 :param main_window: """ super().__init__(main_window) self.main_window = main_window # QDockWidget self.widget_contents = QWidget(self, Qt.WindowFlags()) # QHBoxLayout self.layout = QHBoxLayout(self.widget_contents) @staticmethod def size_hint() -> QSize: """ 在这里定义dock的初始大小 :return: """ return QSize(850, 100) def options(self) -> None: """ 参数设置 :return: """ self.setObjectName("dock_widget") self.widget_contents.setObjectName("dock_widget_contents") self.layout.setObjectName("layout") self.layout.setContentsMargins(0, 0, 0, 0) self.widget_contents.setLayout(self.layout) self.setWidget(self.widget_contents) # 显示位置,子类进行设置 # MainWindow.addDockWidget(Qt.DockWidgetArea(8), self) # self.main_window.addDockWidget(Qt.BottomDockWidgetArea, self) # self.main_window.setStyleSheet("QDockWidget#" + str(self.objectName()) + "::title {background-color:red}") def setup_ui(self) -> None: self.options() # 初始化QDockWidget的高度 self.widget_contents.sizeHint = self.size_hint # QDockWidget 位置发生变动 # self.dockLocationChanged.connect(self.dock_location_changed) # noinspection PyArgumentList def retranslate_ui(self) -> None: self.setWindowTitle(_translate("ToolsExtensionView", "工具扩展"))
def create_interface(self): self.vbox = QVBoxLayout() for field in self.fields: hbox = QHBoxLayout() hbox.setObjectName(str(field[0])) hbox.addWidget(QLabel(str(field[0]))) hbox.addWidget(QLineEdit()) hbox.addWidget(QCheckBox("filter on: "+str(field[0]))) self.vbox.addStretch(1) self.vbox.addLayout(hbox)
def _init_createBaseElement(self): baseWidget = self layout = QHBoxLayout(baseWidget) layout.setObjectName("hLayout" + self._namePostfix) # we want an appropriate space between each item. So we set the top-margin # and bottom-margin to an appropriate value layout.setContentsMargins(10, self.spaceBetweenItems, 0, self.spaceBetweenItems) self.baseElement = baseWidget self.baseLayout = layout
def new_event(self, event): oneEventFrame = QFrame() heightSlot = event.duration * self.oneMinSlot #oneEventFrame.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)) #oneEventFrame.resize(Ui_MainWindow.widthSlot, heightSlot) oneEventFrame.setFixedHeight(heightSlot) oneEventFrame.setContentsMargins(0, 0, 0, 0) oneEventFrame.setStyleSheet("background-color: rgb(2, 116, 205); border-bottom: 1px solid rgb(128, 128, 255);") #color = QtGui.QColor(233, 10, 150) oneEventLayout = QHBoxLayout() oneEventLayout.setContentsMargins(0, 0, 0, 0) oneEventLayout.setObjectName("oneEventLayout") oneEventFrame.setLayout(oneEventLayout) oneEventLayout.setSpacing(0) labelNameEvent = QLabel() labelNameEvent.setToolTipDuration(10) labelNameEvent.setObjectName("labelNameEvent") #labelNameEvent.setText(event.time + " " + event.name) labelNameEvent.setAutoFillBackground(True) labelNameEvent.setFixedHeight(heightSlot) if event.link is not None: link = f'<a href="{event.link}">event.time + " " + event.name</a>' else: link = event.time + " " + event.name print(link) labelNameEvent.setText(link) labelNameEvent.setOpenExternalLinks(True) labelNameEvent.setStyleSheet("color: white;") sheet = "a { text-decoration: underline; color: white }" #labelNameEvent.setDefaultStyleSheet(sheet) #labelNameEvent.resize(Ui_MainWindow.widthSlot, oneEventFrame.height()) oneEventLayout.addWidget(labelNameEvent) print(event.link) if event.link is not None: labelLinkImg = QLabel(link) labelLinkImg.setOpenExternalLinks(True) labelLinkImg.setMouseTracking(False) labelLinkImg.setLayoutDirection(QtCore.Qt.RightToLeft) labelLinkImg.setText("") labelLinkImg.setPixmap(QtGui.QPixmap("linkk.png")) labelLinkImg.setCursor(QCursor(QtCore.Qt.PointingHandCursor)) #self.label_img.setOpenExternalLinks(True) #self.label_img.setObjectName("label_img") oneEventLayout.addWidget(labelLinkImg) return oneEventFrame
class FormatView(QWidget): def __init__(self, parent=None): super(FormatView, self).__init__(parent) # 指定父类为自己 self.setObjectName("input") self.resize(400, 80) self.centralwidget = QWidget(self) self.centralwidget.setObjectName("centralwidget") self.horizontalLayoutWidget = QWidget(self.centralwidget) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 30, 350, 25)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.textEdit = QTextEdit(self.horizontalLayoutWidget) self.textEdit.setObjectName("textEdit") self.horizontalLayout.addWidget(self.textEdit) self.pushButton = QPushButton(self.horizontalLayoutWidget) self.pushButton.setObjectName("pushButton") self.pushButton.setText("确定") self.pushButton.setCheckable(True) self.pushButton.clicked.connect(self.on_click) self.horizontalLayout.addWidget(self.pushButton) QtCore.QMetaObject.connectSlotsByName(self) def on_click(self): if self.pushButton.isChecked(): self.load() path = self.textEdit.toPlainText() try: fm.Formate().rename(path) except Exception as e: print(e) self.OK() def load(self): self.pushButton.setText("正在执行") self.pushButton.clicked.connect(self.emp) def OK(self): self.pushButton.setText("OK") self.pushButton.clicked.connect(self.on_click) # def closeEvent(self, event): # self.close_signal.emit() def emp(self): ''
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 602) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayoutWidget = QWidget(self.centralwidget) self.verticalLayoutWidget.setGeometry(QRect(0, 0, 801, 581)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") # open file button self.openButton = QPushButton(self.verticalLayoutWidget) self.openButton.setObjectName("openButton") self.horizontalLayout.addWidget(self.openButton) # save file button self.saveButton = QPushButton(self.verticalLayoutWidget) self.saveButton.setObjectName("saveButton") self.horizontalLayout.addWidget(self.saveButton) spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout) # tab view self.tableView = QTableView(self.verticalLayoutWidget) self.tableView.setObjectName("tableView") self.verticalLayout.addWidget(self.tableView) MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QCoreApplication.translate MainWindow.setWindowTitle(_translate("GeoDataHelper", "GeoDataHelper")) MainWindow.setWindowIcon(QIcon('./resources/images/icon.ico')) self.openButton.setText(_translate("open", "open")) self.saveButton.setText(_translate("save", "save"))
def setupUi(self, Dialog, text): self.Dialog = Dialog self.Dialog.setObjectName("Dialog") Dialog.setWindowTitle("Lade...") Dialog.setStyleSheet( "background-color: {}; color: white".format("rgb(47, 69, 80)") ) Dialog.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint) # Dialog.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)) horizontalLayout = QHBoxLayout(Dialog) horizontalLayout.setObjectName("horizontal") horizontalLayout.setSizeConstraint(QHBoxLayout.SetFixedSize) # if icon == True: # pixmap = QtGui.QPixmap(logo_cria_button_path) # # Dialog.setPixmap(pixmap.scaled(110, 110, Qt.KeepAspectRatio)) # image = QLabel(Dialog) # image.setObjectName("image") # image.setPixmap(pixmap.scaled(30, 30, Qt.KeepAspectRatio)) self.label = QLabel(Dialog) self.label.setObjectName("label") self.label.setText(text) self.label.setStyleSheet("padding: 20px") label_spinner = QLabel(Dialog) self.label.setObjectName("label_spinner") label_spinner.setFixedSize(30, 30) spinner = QtWaitingSpinner(label_spinner) spinner.setRoundness(70.0) # spinner.setMinimumTrailOpacity(10.0) # spinner.setTrailFadePercentage(60.0) spinner.setNumberOfLines(15) spinner.setLineLength(8) # spinner.setLineWidth(5) spinner.setInnerRadius(5) # spinner.setRevolutionsPerSecond(2) spinner.setColor(Qt.white) spinner.start() # starts spinning self.label.setAlignment(Qt.AlignCenter) # if icon == True: # horizontalLayout.addWidget(image) horizontalLayout.addWidget(self.label) horizontalLayout.addWidget(label_spinner)
def __init__(self, parent: QWidget): super().__init__(parent) self.date_display = DeskClock.Date(self) self.time_display = DeskClock.Time(self) self.update_time() self.timer = QTimer(self) self.timer.timeout.connect(self.update_time) self.timer.start(1000) layout = QHBoxLayout(self) layout.setObjectName('desk_clock') layout.addWidget(self.date_display) layout.addWidget(self.time_display) self.setLayout(layout)
class AppWidget(QWidget): def __init__(self, parent, container: Container) -> None: super().__init__(parent) self.setMinimumHeight(50) self.setMaximumHeight(50) self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setContentsMargins(0, 0, 0, 0) _translate = QCoreApplication.translate img_name = container.name name_part = container.name.split('/') if len(name_part) > 1: img_name = name_part[1] self.pic = AppAvatar(text_utils.getSimpleName(img_name), parent=self, radius=22) self.horizontalLayout.addWidget(self.pic) self.infoWidget = QWidget(self) self.infoWidget.setObjectName("infoWidget") self.infoLayout = QVBoxLayout(self.infoWidget) self.infoLayout.setContentsMargins(5, 0, 0, 0) self.name = QLabel(self) self.name.setObjectName("name") self.infoLayout.addWidget(self.name) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(2) self.infoWidget.setSizePolicy(sizePolicy) self.horizontalLayout.addWidget(self.infoWidget) self.start = QPushButton(self) self.start.setObjectName("start") self.horizontalLayout.addWidget(self.start) self.start.setText(_translate("widget", "Start")) self.name.setText(_translate("widget", container.name)) QMetaObject.connectSlotsByName(self)
def refresh_search(self): """ Called to refresh the advanced search """ # Old values stored (fields, conditions, values, links, nots) = self.get_filters(False) # We remove the old layout self.clearLayout(self.layout()) QObjectCleanupHandler().add(self.layout()) # Links and add rows removed from every row self.rows_borders_removed() # Links and add rows reput in the good rows self.rows_borders_added(links) master_layout = QVBoxLayout() main_layout = QGridLayout() # Everything added to the layout for i in range(0, len(self.rows)): for j in range(0, 7): widget = self.rows[i][j] if widget != None: main_layout.addWidget(widget, i, j) # Search button added at the end searchLayout = QHBoxLayout(None) searchLayout.setObjectName("search layout") self.search = QPushButton("Search") self.search.setFixedWidth(100) self.search.clicked.connect(self.launch_search) searchLayout.addWidget(self.search) searchLayout.setParent(None) # New layout added master_layout.addLayout(main_layout) master_layout.addLayout(searchLayout) self.setLayout(master_layout)
class DetailsDialog(QWidget): '''Dialog showing mod details''' def __init__(self, parent: QWidget, mod: Mod): super().__init__(parent) self.setWindowFlags(QtCore.Qt.Window) self.setObjectName("Details") self.resize(700, 800) self.setMinimumSize(600, 600) self.layout = QHBoxLayout(self) self.layout.setObjectName("layout") self.document = QTextDocument() self.document.setPlainText(str(mod)) self.text = QTextEdit(self) self.text.setObjectName("text") self.text.setDocument(self.document) self.text.setAutoFormatting(QTextEdit.AutoAll) self.text.setReadOnly(True) self.text.setLineWrapMode(QTextEdit.NoWrap) self.layout.addWidget(self.text) self.setWindowTitle(mod.name + " " + TRANSLATE("Details", "Details")) QtCore.QMetaObject.connectSlotsByName(self) def adjustWidth(self): '''Fits size to content''' self.resize( self.document.idealWidth() + \ self.text.contentsMargins().left() + self.text.contentsMargins().right() + \ self.contentsMargins().left() + self.contentsMargins().right() + 50, self.height()) def showEvent(self, event): '''Qt show event''' super().showEvent(event) self.adjustWidth() def keyPressEvent(self, event): '''Qt KeyPressEvent override''' if event.key() == QtCore.Qt.Key_Escape: self.close()
class PMReportWidget(QWidget): def __init__(self): super().__init__() _translate = QCoreApplication.translate self.setObjectName("tab_report") self.verticalLayout_2 = QVBoxLayout(self) self.verticalLayout_2.setObjectName("verticalLayout_2") self.widget_2 = QWidget(self) self.widget_2.setMaximumSize(QSize(16777215, 30)) self.widget_2.setObjectName("widget_2") self.horizontalLayout_5 = QHBoxLayout(self.widget_2) self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.horizontalLayout_4 = QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem1) self.pushButton_browser_open = QPushButton(self.widget_2) self.pushButton_browser_open.setMinimumSize(QSize(80, 0)) self.pushButton_browser_open.setObjectName("pushButton_browser_open") self.horizontalLayout_4.addWidget(self.pushButton_browser_open) self.horizontalLayout_5.addLayout(self.horizontalLayout_4) self.verticalLayout_2.addWidget(self.widget_2) self.horizontalLayout_result = QHBoxLayout() self.horizontalLayout_result.setObjectName("horizontalLayout_result") spacerItem2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.horizontalLayout_result.addItem(spacerItem2) self.verticalLayout_2.addLayout(self.horizontalLayout_result) self.pushButton_browser_open.setText(_translate("MainWindow", "浏览器打开"))
def __init__(self): QMainWindow.__init__(self) self.command_stack = [] self.setObjectName("client_window") self.setWindowModality(Qt.NonModal) self.resize(800, 600) self.setDocumentMode(False) self.raw_title = Core.get_res_man().get_string("core.windowTitle") self.setWindowTitle(self.raw_title) central_widget = QWidget(self) central_widget.setObjectName("central_widget") self.setCentralWidget(central_widget) vertical_layout = QVBoxLayout(central_widget) vertical_layout.setObjectName("vertical_layout") central_widget.setLayout(vertical_layout) self.text_area = QTextEdit(central_widget) self.text_area.setReadOnly(True) self.text_area.setObjectName("text_area") vertical_layout.addWidget(self.text_area) self.command_row = QWidget(central_widget) self.command_row.setObjectName("command_row") vertical_layout.addWidget(self.command_row) command_row_layout = QHBoxLayout(self.command_row) command_row_layout.setObjectName("command_row_layout") command_row_layout.setContentsMargins(0, 0, 0, 0) command_row_layout.setSpacing(0) self.command_row.setLayout(command_row_layout) self.add_command_line() menu_bar = QMenuBar(self) menu_bar.setObjectName("menubar") self.setMenuBar(menu_bar)
class SortView(QWidget): def __init__(self, parent=None): super(SortView, self).__init__(parent) # 指定父类为自己 self.setObjectName("MainWindow") self.resize(369, 100) self.centralwidget = QWidget(self) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout_3 = QHBoxLayout(self.centralwidget) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.verticalLayout = QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.label = QLabel(self.centralwidget) self.label.setObjectName("label") self.label.setText("归档到") self.horizontalLayout.addWidget(self.label) self.lineEdit = QLineEdit(self.centralwidget) self.lineEdit.setObjectName("lineEdit") self.lineEdit.setMinimumWidth(300) self.horizontalLayout.addWidget(self.lineEdit) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_2 = QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.label_2.setText("需分类") self.horizontalLayout_2.addWidget(self.label_2) self.lineEdit_2 = QLineEdit(self.centralwidget) self.lineEdit_2.setObjectName("lineEdit_2") self.lineEdit_2.setMinimumWidth(300) self.horizontalLayout_2.addWidget(self.lineEdit_2) self.verticalLayout.addLayout(self.horizontalLayout_2) self.pushButton = QPushButton(self.centralwidget) self.pushButton.setObjectName("pushButton") self.pushButton.setText('确定') self.pushButton.setCheckable(True) self.pushButton.clicked.connect(self.on_click) self.verticalLayout.addWidget(self.pushButton) self.horizontalLayout_3.addLayout(self.verticalLayout) def on_click(self): if self.pushButton.isChecked(): self.load() path1 = self.lineEdit.text() path2 = self.lineEdit_2.text() s.Sort().sort(path1, path2) self.OK() def load(self): self.pushButton.setText("正在执行") self.pushButton.clicked.connect(self.emp) def OK(self): self.pushButton.setText("OK") self.pushButton.clicked.connect(self.on_click) def emp(self): ''
class PlaylistTab(QWidget): '''A widget for administrating the all models of the playlist data.''' def __init__(self, parent=None): super().__init__(parent) self.setObjectName('tabPlaylist') self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayoutPlaylist") self.horizontalLayout.setContentsMargins(6, 6, 6, 6) self.horizontalLayout.setSpacing(6) self.horizontalSplitter = QSplitter(self) self.horizontalSplitter.setObjectName("horizontalSplitterPlaylist") self.horizontalSplitter.setChildrenCollapsible(False) # Artists/Albums/Games Layout Widget self.verticalSplitter = QSplitter(Qt.Vertical, self) self.verticalSplitter.setObjectName('verticalSplitterPlaylist') self.verticalSplitter.setChildrenCollapsible(False) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setHeightForWidth( self.verticalSplitter.sizePolicy().hasHeightForWidth()) self.verticalSplitter.setSizePolicy(sizePolicy) self.horizontalSplitter.addWidget(self.verticalSplitter) # Create the group box widgets for the playlist items self.groupBoxArtists = ArtistGroupBox(self) self.groupBoxAlbums = AlbumGroupBox(self) self.groupBoxGames = GameGroupBox(self) self.groupBoxSongs = SongGroupBox(self) # Add group boxes to layouts self.verticalSplitter.addWidget(self.groupBoxArtists) self.verticalSplitter.addWidget(self.groupBoxAlbums) self.verticalSplitter.addWidget(self.groupBoxGames) self.horizontalSplitter.addWidget(self.groupBoxSongs) self.horizontalLayout.addWidget(self.horizontalSplitter)
class TextPlusButton(QFrame): def __init__(self, parent): QFrame.__init__(self, parent) # font = QtGui.QFont() # font.setPointSize(10) # self.setFont(font) # self.centralWidget = QWidget(frmTextPlus) # self.centralWidget.setObjectName(_fromUtf8("centralWidget")) # self.frame = QFrame(self.centralWidget) # self.frame.setGeometry(QtCore.QRect(40, 50, 189, 22)) size_policy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) # size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(size_policy) self.setMinimumSize(QtCore.QSize(50, 22)) self.setMaximumSize(QtCore.QSize(16777215, 1010)) self.setFrameShape(QFrame.StyledPanel) self.setFrameShadow(QFrame.Raised) self.setObjectName("TextPlusButton") self.horizontalLayout = QHBoxLayout(self) # self.horizontalLayout.setMargin(0) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setSpacing(4) self.horizontalLayout.setObjectName("horizontalLayout") self.textbox = QLineEdit(self) self.textbox.setObjectName("textbox") self.horizontalLayout.addWidget(self.textbox) self.button = QPushButton(self) button_size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) button_size_policy.setHorizontalStretch(0) button_size_policy.setVerticalStretch(0) # button_size_policy.setHeightForWidth(self.button.sizePolicy().hasHeightForWidth()) self.button.setSizePolicy(button_size_policy) self.button.setMaximumSize(QtCore.QSize(30, 16777215)) self.button.setObjectName("button") self.button.setText("...") self.horizontalLayout.addWidget(self.button)
class RingSegment(Segment): name = 'Ring positioner' def init_controls(self): """Add all controls needed for a given meristem to be set up.""" self.controls = QHBoxLayout() self.controls.setObjectName('controls') spacerItem = QSpacerItem(20, 0, QSizePolicy.Minimum, QSizePolicy.Fixed) self.controls.addItem(spacerItem) self.controls.addWidget(self.make_label('angle_label', 'angle:')) self.angle = self.text_line('set_angle', 60) self.controls.addWidget(self.angle) self.controls.addWidget(self.make_label('per_ring_label', 'per ring:')) self.per_ring = self.text_line('per_ring', 12) self.controls.addWidget(self.per_ring) self.controls.addWidget(self.make_label('rings_label', 'rings:')) self.to_add_input = self.text_line('set_rings', 5) self.controls.addWidget(self.to_add_input) self.main_box.addLayout(self.controls) def positioner(self, start_angle, start_height, front): """Get a positioner for the current settings.""" return self.positioner_class( math.radians(float(self.angle.text() or 0)), int(self.per_ring.text() or 0), start_angle=start_angle, start_height=start_height, ) @property def to_add(self): """The amount of buds to add.""" return int(self.to_add_input.text() or 0) * int(self.per_ring.text() or 0)
class FloatingModal(RoundedWindow): def __init__(self, parent): super(FloatingModal, self).__init__(parent) # create list widget for modal self.list = QListWidget(self) self.list.setGeometry(QRect(20, 70, 320, 380)) self.list.setStyleSheet("QListView::item{" "color: black;" "border: 0px;" "padding: 2px 20px }" "QListView::item:active{" "border: none;" "background-color: white;}") self.list.setSelectionMode(QAbstractItemView.SingleSelection) self.list.setViewMode(QListView.ListMode) # horizontal layout for label and add icon self.layout = QWidget(self) self.layout.setGeometry(QRect(20, 30, 209, 33)) self.layout.setObjectName("horizontalLayout") self.label = QHBoxLayout(self.layout) self.label.setContentsMargins(0, 0, 0, 0) self.label.setObjectName("modalLabel") self.modal_id = QLabel(self.layout) font = QFont(":/icons/src/fonts/Montserrat-Bold.ttf") font.setPointSize(18) self.modal_id.setFont(font) self.label.addWidget(self.modal_id) self.icon = QLabel(self.layout) self.icon.setText("") self.label.addWidget(self.icon) # set icons in list widget items to the right delegate = ItemDelegate() self.list.setItemDelegate(delegate)
class TransactionListTab(QWidget): dbhelper = None def __init__(self, dbhelper, *args): super(TransactionListTab, self).__init__(*args) Lumberjack.info('spawning a << TransactionListTab >>') self.dbhelper = dbhelper self.horizontalLayout = QHBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") model = AlchemicalTableModel( self.dbhelper.get_app_db_session(), Transaction, [('Contract', Transaction.contract, 'contract.reference', {}), ('Letter', Transaction.letter, 'letter.reference', {}), ('Bank account', Transaction.account, 'account.account', {}), ('Amount', Transaction.amount, 'amount', {'type': 'currency', }), ('Transaction date', Transaction.transaction_date, 'transaction_date', {}), ('Payment date', Transaction.payment_date, 'payment_date', {}), ('Payed?', Transaction.payment_state, 'payment_state', {}), ('Debit/Credit', Transaction.debit, 'debit', {'type': 'debit', }), ('Date created', Transaction.date_created, 'date_created', {})]) self.tableView = MyTableView() self.tableView.setModel(model) self.form = TransactionForm(model, self.dbhelper) selectionModel = self.tableView.selectionModel() selectionModel.selectionChanged.connect(self.form.set_mapper_index_from_selection) self.horizontalLayout.addWidget(self.form) self.horizontalLayout.addWidget(self.tableView) self.setLayout(self.horizontalLayout)
class ControlWidget(QWidget): def __init__(self, winParent): super(ControlWidget, self).__init__() self.winParent = winParent self.rgbdwn = RGBMIN self.rgbup = RGBMAX self.hsvdwn = HSVMIN self.hsvup = HSVMAX self.yuvdwn = YUVMIN self.yuvup = YUVMAX self.initUI() def initUI(self): self.setMinimumSize(1340, 200) self.setMaximumSize(1340, 200) """Radio buttons for Original/RGB/HSV/YUV images""" self.origButton = QRadioButton("Original") self.rgbButton = QRadioButton("RGB") self.hsvButton = QRadioButton("HSV") self.yuvButton = QRadioButton("YUV") """Signals for toggled radio buttons""" self.origButton.toggled.connect(lambda: self.origButtonState()) self.rgbButton.toggled.connect(lambda: self.rgbButtonState()) self.hsvButton.toggled.connect(lambda: self.hsvButtonState()) self.yuvButton.toggled.connect(lambda: self.yuvButtonState()) self.origButton.setChecked(True) """Main layout of the widget will contain several vertical layouts""" self.hLayout = QHBoxLayout(self) self.hLayout.setObjectName("hLayout") """ Vertical Layout for radio buttons """ self.radioLayout = QVBoxLayout() self.radioLayout.setObjectName("radioLayout") self.radioLayout.addWidget(self.origButton) self.radioLayout.addWidget(self.rgbButton) self.radioLayout.addWidget(self.hsvButton) self.radioLayout.addWidget(self.yuvButton) self.vSpacer = QSpacerItem(30, 500, QSizePolicy.Ignored, QSizePolicy.Ignored) self.radioLayout.addItem(self.vSpacer) hmin, smin, vmin = HSVMIN hmax, smax, vmax = HSVMAX """ Vertical Layout for HMIN Slider""" self.hminLayout = QVBoxLayout() self.hminLayout.setObjectName("hminLayout") self.hminLabel = QLabel("HMin") self.hminValue = QLabel("0") self.hminValue.setAlignment(Qt.AlignCenter) self.hminSlider = QSlider(Qt.Vertical) self.hminSlider.setMinimum(hmin) self.hminSlider.setMaximum(hmax) self.hminSlider.setValue(hmin) self.hminLayout.addWidget(self.hminLabel) self.hminLayout.addWidget(self.hminValue) self.hminLayout.addWidget(self.hminSlider) """ Vertical Layout for HMAX Slider""" self.hmaxLayout = QVBoxLayout() self.hmaxLayout.setObjectName("hmaxLayout") self.hmaxLabel = QLabel("HMax") self.hmaxValue = QLabel("6") self.hmaxValue.setAlignment(Qt.AlignCenter) self.hmaxSlider = QSlider(Qt.Vertical) self.hmaxSlider.setMinimum(hmin) self.hmaxSlider.setMaximum(hmax) self.hmaxSlider.setValue(hmax) self.hmaxLayout.addWidget(self.hmaxLabel) self.hmaxLayout.addWidget(self.hmaxValue) self.hmaxLayout.addWidget(self.hmaxSlider) """ Vertical Layout for SMIN Slider""" self.sminLayout = QVBoxLayout() self.sminLayout.setObjectName("sminLayout") self.sminLabel = QLabel("SMin") self.sminValue = QLabel("0") self.sminValue.setAlignment(Qt.AlignCenter) self.sminSlider = QSlider(Qt.Vertical) self.sminSlider.setMinimum(smin) self.sminSlider.setMaximum(smax) self.sminSlider.setValue(smin) self.sminLayout.addWidget(self.sminLabel) self.sminLayout.addWidget(self.sminValue) self.sminLayout.addWidget(self.sminSlider) """ Vertical Layout for SMAX Slider""" self.smaxLayout = QVBoxLayout() self.smaxLayout.setObjectName("smaxLayout") self.smaxLabel = QLabel("SMax") self.smaxValue = QLabel("1") self.smaxValue.setAlignment(Qt.AlignCenter) self.smaxSlider = QSlider(Qt.Vertical) self.smaxSlider.setMinimum(smin) self.smaxSlider.setMaximum(smax) self.smaxSlider.setValue(smax) self.smaxLayout.addWidget(self.smaxLabel) self.smaxLayout.addWidget(self.smaxValue) self.smaxLayout.addWidget(self.smaxSlider) """ Vertical Layout for VMIN Slider""" self.vminLayout = QVBoxLayout() self.vminLayout.setObjectName("vminLayout") self.vminLabel = QLabel("VMin") self.vminValue = QLabel("0") self.vminValue.setAlignment(Qt.AlignCenter) self.vminSlider = QSlider(Qt.Vertical) self.vminSlider.setMinimum(vmin) self.vminSlider.setMaximum(vmax) self.vminSlider.setValue(vmin) self.vminLayout.addWidget(self.vminLabel) self.vminLayout.addWidget(self.vminValue) self.vminLayout.addWidget(self.vminSlider) """ Vertical Layout for VMAX Slider""" self.vmaxLayout = QVBoxLayout() self.vmaxLayout.setObjectName("vmaxLayout") self.vmaxLabel = QLabel("VMax") self.vmaxValue = QLabel("255") self.vmaxValue.setAlignment(Qt.AlignCenter) self.vmaxSlider = QSlider(Qt.Vertical) self.vmaxSlider.setMinimum(vmin) self.vmaxSlider.setMaximum(vmax) self.vmaxSlider.setValue(vmax) self.vmaxLayout.addWidget(self.vmaxLabel) self.vmaxLayout.addWidget(self.vmaxValue) self.vmaxLayout.addWidget(self.vmaxSlider) """Adding all the vertical layouts to the main horizontal layout""" self.hLayout.addLayout(self.radioLayout) self.hLayout.addLayout(self.hminLayout) self.hLayout.addLayout(self.hmaxLayout) self.hLayout.addLayout(self.sminLayout) self.hLayout.addLayout(self.smaxLayout) self.hLayout.addLayout(self.vminLayout) self.hLayout.addLayout(self.vmaxLayout) self.setLayout(self.hLayout) """Signals for sliders value changes""" self.hminSlider.valueChanged.connect(self.changeHmin) self.hmaxSlider.valueChanged.connect(self.changeHmax) self.sminSlider.valueChanged.connect(self.changeSmin) self.smaxSlider.valueChanged.connect(self.changeSmax) self.vminSlider.valueChanged.connect(self.changeVmin) self.vmaxSlider.valueChanged.connect(self.changeVmax) # Show filtered image. Don't manually disable radio button, API does it for you! """Methods for showing images depending on the current checked radio button""" def origButtonState(self): if self.origButton.isChecked(): self.winParent.setFilterName("Orig") def rgbButtonState(self): if self.rgbButton.isChecked(): self.winParent.setFilterName("RGB") rmin, gmin, bmin = RGBMIN rmax, gmax, bmax = RGBMAX print(RGBMAX) rd, gd, bd = self.rgbdwn ru, gu, bu = self.rgbup self.hminLabel.setText("Rmin") self.hminValue.setText(str(rd)) self.hminSlider.setMinimum(rmin) self.hminSlider.setMaximum(rmax) self.hminSlider.setValue(rd) self.hmaxLabel.setText("RMax") self.hmaxValue.setText(str(ru)) self.hmaxSlider.setMinimum(rmin) self.hmaxSlider.setMaximum(rmax) self.hmaxSlider.setValue(ru) self.sminLabel.setText("GMin") self.sminValue.setText(str(gd)) self.sminSlider.setMinimum(gmin) self.sminSlider.setMaximum(gmax) self.sminSlider.setValue(gd) self.smaxLabel.setText("GMax") self.smaxValue.setText(str(gu)) self.smaxSlider.setMinimum(gmin) self.smaxSlider.setMaximum(gmax) self.smaxSlider.setValue(gu) self.vminLabel.setText("BMin") self.vminValue.setText(str(bd)) self.vminSlider.setMinimum(bmin) self.vminSlider.setMaximum(bmax) self.vminSlider.setValue(bd) self.vmaxLabel.setText("BMax") self.vmaxValue.setText(str(bu)) self.vmaxSlider.setMinimum(bmin) self.vmaxSlider.setMaximum(bmax) self.vmaxSlider.setValue(bu) def hsvButtonState(self): if self.hsvButton.isChecked(): self.winParent.setFilterName("HSV") hmin, smin, vmin = HSVMIN hmax, smax, vmax = HSVMAX hd, sd, vd = self.hsvdwn hu, su, vu = self.hsvup self.hminLabel.setText("HMin") self.hminValue.setText(str(hd)) self.hminSlider.setMinimum(hmin) self.hminSlider.setMaximum(hmax) self.hminSlider.setValue(hd) self.hmaxLabel.setText("HMax") self.hmaxValue.setText(str(hu)) self.hmaxSlider.setMinimum(hmin) self.hmaxSlider.setMaximum(hmax) self.hmaxSlider.setValue(hu) self.sminLabel.setText("SMin") self.sminValue.setText(str(sd)) self.sminSlider.setMinimum(smin) self.sminSlider.setMaximum(smax) self.sminSlider.setValue(sd) self.smaxLabel.setText("SMax") self.smaxValue.setText(str(su)) self.smaxSlider.setMinimum(smin) self.smaxSlider.setMaximum(smax) self.smaxSlider.setValue(su) self.vminLabel.setText("VMin") self.vminValue.setText(str(vd)) self.vminSlider.setMinimum(vmin) self.vminSlider.setMaximum(vmax) self.vminSlider.setValue(vd) self.vmaxLabel.setText("VMax") self.vmaxValue.setText(str(vu)) self.vmaxSlider.setMinimum(vmin) self.vmaxSlider.setMaximum(vmax) self.vmaxSlider.setValue(vu) def yuvButtonState(self): if self.yuvButton.isChecked(): self.winParent.setFilterName("YUV") ymin, umin, vmin = YUVMIN ymax, umax, vmax = YUVMAX yd, ud, vd = self.yuvdwn yu, uu, vu = self.yuvup self.hminLabel.setText("YMin") self.hminValue.setText(str(yd)) self.hminSlider.setMinimum(ymin) self.hminSlider.setMaximum(ymax) self.hminSlider.setValue(yd) self.hmaxLabel.setText("YMax") self.hmaxValue.setText(str(yu)) self.hmaxSlider.setMinimum(ymin) self.hmaxSlider.setMaximum(ymax) self.hmaxSlider.setValue(yu) self.sminLabel.setText("UMin") self.sminValue.setText(str(ud)) self.sminSlider.setMinimum(umin) self.sminSlider.setMaximum(umax) self.sminSlider.setValue(ud) self.smaxLabel.setText("UMax") self.smaxValue.setText(str(uu)) self.smaxSlider.setMinimum(umin) self.smaxSlider.setMaximum(umax) self.smaxSlider.setValue(uu) self.vminLabel.setText("VMin") self.vminValue.setText(str(vd)) self.vminSlider.setMinimum(vmin) self.vminSlider.setMaximum(vmax) self.vminSlider.setValue(vd) self.vmaxLabel.setText("VMax") self.vmaxValue.setText(str(vu)) self.vmaxSlider.setMinimum(vmin) self.vmaxSlider.setMaximum(vmax) self.vmaxSlider.setValue(vu) """Methods to get the slider value and update value labels""" def changeHmin(self): value = self.hminSlider.value() if self.hsvButton.isChecked(): self.hsvdwn[0] = value elif self.rgbButton.isChecked(): self.rgbdwn[0] = value elif self.yuvButton.isChecked(): value = self.hminSlider.value() self.yuvdwn[0] = value self.hminValue.setText(str(value)) self.setMIN() def changeHmax(self): value = self.hmaxSlider.value() if self.hsvButton.isChecked(): self.hsvup[0] = value elif self.rgbButton.isChecked(): self.rgbup[0] = value elif self.yuvButton.isChecked(): self.yuvup[0] = value self.hmaxValue.setText(str(value)) self.setMAX() def changeSmin(self): value = self.sminSlider.value() if self.hsvButton.isChecked(): self.hsvdwn[1] = value elif self.rgbButton.isChecked(): self.rgbdwn[1] = value elif self.yuvButton.isChecked(): self.yuvdwn[1] = value self.sminValue.setText(str(value)) self.setMIN() def changeSmax(self): value = self.smaxSlider.value() if self.hsvButton.isChecked(): self.hsvup[1] = value elif self.rgbButton.isChecked(): self.rgbup[1] = value elif self.yuvButton.isChecked(): self.yuvup[1] = value self.smaxValue.setText(str(value)) self.setMAX() def changeVmin(self): value = self.vminSlider.value() if self.hsvButton.isChecked(): self.hsvdwn[2] = value elif self.rgbButton.isChecked(): self.rgbdwn[2] = value elif self.yuvButton.isChecked(): self.yuvdwn[2] = value self.vminValue.setText(str(value)) self.setMIN() def changeVmax(self): value = self.vmaxSlider.value() if self.hsvButton.isChecked(): self.hsvup[2] = value elif self.rgbButton.isChecked(): self.rgbup[2] = value elif self.yuvButton.isChecked(): self.yuvup[2] = value self.vmaxValue.setText(str(value)) self.setMAX() def setMAX(self): filt = self.winParent.getFilterName() if self.hsvButton.isChecked(): h, s, v = self.hsvup self.winParent.getCamera().getFilter(filt).setUpLimit(h, s, v) elif self.rgbButton.isChecked(): h, s, v = self.rgbup self.winParent.getCamera().getFilter(filt).setUpLimit(h, s, v) elif self.yuvButton.isChecked(): h, s, v = self.yuvup self.winParent.getCamera().getFilter(filt).setUpLimit(h, s, v) def setMIN(self): filt = self.winParent.getFilterName() if self.hsvButton.isChecked(): h, s, v = self.hsvdwn self.winParent.getCamera().getFilter(filt).setDownLimit(h, s, v) elif self.rgbButton.isChecked(): h, s, v = self.rgbdwn self.winParent.getCamera().getFilter(filt).setDownLimit(h, s, v) elif self.yuvButton.isChecked(): h, s, v = self.yuvdwn self.winParent.getCamera().getFilter(filt).setDownLimit(h, s, v) """Close event, for finalize the program""" def closeEvent(self, event): self.winParent.closeimagesWidget()
def __init__(self, parent=None): """ Constructor @param parent parent widget (QWidget) """ super(PyRegExpWizardCharactersDialog, self).__init__(parent) self.setupUi(self) self.comboItems = [] self.singleComboItems = [] # these are in addition to the above self.comboItems.append(self.tr("Normal character")) self.comboItems.append( self.tr("Unicode character in hexadecimal notation")) self.comboItems.append( self.tr("Unicode character in octal notation")) self.singleComboItems.append(self.tr("---")) self.singleComboItems.append(self.tr("Bell character (\\a)")) self.singleComboItems.append(self.tr("Page break (\\f)")) self.singleComboItems.append(self.tr("Line feed (\\n)")) self.singleComboItems.append(self.tr("Carriage return (\\r)")) self.singleComboItems.append(self.tr("Horizontal tabulator (\\t)")) self.singleComboItems.append(self.tr("Vertical tabulator (\\v)")) self.charValidator = QRegExpValidator(QRegExp(".{0,1}"), self) self.hexValidator = QRegExpValidator(QRegExp("[0-9a-fA-F]{0,4}"), self) self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self) # generate dialog part for single characters self.singlesBoxLayout = QVBoxLayout(self.singlesBox) self.singlesBoxLayout.setObjectName("singlesBoxLayout") self.singlesBoxLayout.setSpacing(6) self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesBox.setLayout(self.singlesBoxLayout) self.singlesView = QScrollArea(self.singlesBox) self.singlesView.setObjectName("singlesView") self.singlesBoxLayout.addWidget(self.singlesView) self.singlesItemsBox = QWidget(self) self.singlesView.setWidget(self.singlesItemsBox) self.singlesItemsBox.setObjectName("singlesItemsBox") self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox) self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesItemsBoxLayout.setSpacing(6) self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout) self.singlesEntries = [] self.__addSinglesLine() hlayout0 = QHBoxLayout() hlayout0.setContentsMargins(0, 0, 0, 0) hlayout0.setSpacing(6) hlayout0.setObjectName("hlayout0") self.moreSinglesButton = QPushButton( self.tr("Additional Entries"), self.singlesBox) self.moreSinglesButton.setObjectName("moreSinglesButton") hlayout0.addWidget(self.moreSinglesButton) hspacer0 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout0.addItem(hspacer0) self.singlesBoxLayout.addLayout(hlayout0) self.moreSinglesButton.clicked.connect(self.__addSinglesLine) # generate dialog part for character ranges self.rangesBoxLayout = QVBoxLayout(self.rangesBox) self.rangesBoxLayout.setObjectName("rangesBoxLayout") self.rangesBoxLayout.setSpacing(6) self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesBox.setLayout(self.rangesBoxLayout) self.rangesView = QScrollArea(self.rangesBox) self.rangesView.setObjectName("rangesView") self.rangesBoxLayout.addWidget(self.rangesView) self.rangesItemsBox = QWidget(self) self.rangesView.setWidget(self.rangesItemsBox) self.rangesItemsBox.setObjectName("rangesItemsBox") self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox) self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesItemsBoxLayout.setSpacing(6) self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout) self.rangesEntries = [] self.__addRangesLine() hlayout1 = QHBoxLayout() hlayout1.setContentsMargins(0, 0, 0, 0) hlayout1.setSpacing(6) hlayout1.setObjectName("hlayout1") self.moreRangesButton = QPushButton( self.tr("Additional Entries"), self.rangesBox) self.moreSinglesButton.setObjectName("moreRangesButton") hlayout1.addWidget(self.moreRangesButton) hspacer1 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout1.addItem(hspacer1) self.rangesBoxLayout.addLayout(hlayout1) self.moreRangesButton.clicked.connect(self.__addRangesLine)
def setupUi(self, Ucics): size_280_650 = QSize(280, 650) size_20_20 = QSize(20, 20) size_25_25 = QSize(25, 25) Ucics.setObjectName("Ucics") Ucics.resize(size_280_650) # 窗口大小 Ucics.setMinimumSize(size_280_650) # 设置最小大小 Ucics.setMaximumSize(size_280_650) # 设置最大大小 Ucics.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 无边框 Ucics.setMouseTracking(True) # 可拖动 Ucics.setContextMenuPolicy(Qt.NoContextMenu) # 禁止上下文菜单 # 由于父QWidget无法通过样式设置背景 # 所以这里把所有控件放到子QWidget中 self.bgWidget = QWidget(Ucics) self.bgWidget.setObjectName("bgWidget") # 顶部标题图标 最小化 关闭 self.topWidget = QWidget(self.bgWidget) self.topWidget.setMaximumHeight(25) self.topWidget.setObjectName("topWidget") # --布局 topLayout = QHBoxLayout(self.topWidget) topLayout.setSpacing(1) topLayout.setContentsMargins(0, 0, 0, 0) topLayout.setObjectName("topLayout") # ----icon self.iconLabel = QLabel(self.bgWidget) self.iconLabel.setMinimumSize(size_25_25) self.iconLabel.setMaximumSize(size_25_25) self.iconLabel.setObjectName("iconLabel") # ----最小化按钮 self.minButton = QPushButton(self.bgWidget) self.minButton.setMinimumSize(size_25_25) self.minButton.setMaximumSize(size_25_25) self.minButton.setObjectName("minButton") # ----关闭按钮 self.closeButton = QPushButton(self.bgWidget) self.closeButton.setMinimumSize(size_25_25) self.closeButton.setMaximumSize(size_25_25) self.closeButton.setObjectName("closeButton") # ----添加到布局中 topLayout.addWidget(self.iconLabel, 0, Qt.AlignLeft) topLayout.addWidget(self.minButton, 1, Qt.AlignRight) topLayout.addWidget(self.closeButton, 0, Qt.AlignRight) # 头像 昵称 心情 天气等 self.headWidget = QWidget(self.bgWidget) self.headWidget.setMinimumHeight(90) self.headWidget.setMaximumHeight(90) self.headWidget.setObjectName("headWidget") # --布局 headLayout = QHBoxLayout(self.headWidget) headLayout.setSpacing(6) headLayout.setContentsMargins(9, 20, 9, 6) headLayout.setObjectName("headLayout") # ----头像 self.headLabel = QLabel(self.headWidget) self.headLabel.setMinimumWidth(60) self.headLabel.setMaximumWidth(60) self.headLabel.setToolTip("") self.headLabel.setCursor(QCursor(Qt.PointingHandCursor)) self.headLabel.setObjectName("headLabel") # ----中间部分(昵称和签名等) self.headInfoWidget = QWidget(self.headWidget) self.headInfoWidget.setObjectName("headInfoWidget") # ------中间部分布局 headInfoLayout = QVBoxLayout(self.headInfoWidget) headInfoLayout.setSpacing(1) headInfoLayout.setContentsMargins(0, 0, 0, 0) headInfoLayout.setObjectName("headInfoLayout") # --------昵称 self.nameLabel = QLabel(self.headInfoWidget) self.nameLabel.setMinimumHeight(20) self.nameLabel.setMaximumHeight(20) self.nameLabel.setObjectName("nameLabel") # --------签名 self.moodEdit = LineEdit(self.headInfoWidget) self.moodEdit.setMinimumHeight(20) self.moodEdit.setMaximumHeight(20) self.moodEdit.setFrame(False) # 去掉边框 # self.moodEdit.setClearButtonEnabled(True) # 添加清除按钮 self.moodEdit.setObjectName("moodEdit") # --------工具 self.toolWidget = QWidget(self.headInfoWidget) self.toolWidget.setMinimumHeight(20) self.toolWidget.setMaximumHeight(20) self.toolWidget.setObjectName("toolWidget") # ----------工具布局 toolLayout = QHBoxLayout(self.toolWidget) toolLayout.setSpacing(1) toolLayout.setContentsMargins(0, 0, 0, 0) toolLayout.setObjectName("toolLayout") # ------------空间 self.qzoneButton = QPushButton(self.toolWidget) self.qzoneButton.setMinimumSize(size_20_20) self.qzoneButton.setMaximumSize(size_20_20) self.qzoneButton.setObjectName("qzoneButton") # ------------皮肤 self.skinButton = QPushButton(self.toolWidget) self.skinButton.setMinimumSize(size_20_20) self.skinButton.setMaximumSize(size_20_20) self.skinButton.setObjectName("skinButton") # ------------添加到布局 toolLayout.addWidget(self.qzoneButton, 0, Qt.AlignLeft) toolLayout.addWidget(self.skinButton, 1, Qt.AlignLeft) # --------添加到布局 headInfoLayout.addWidget(self.nameLabel) headInfoLayout.addWidget(self.moodEdit) headInfoLayout.addWidget(self.toolWidget) # ----天气 self.weatherLabel = QLabel(self.headWidget) self.weatherLabel.setMinimumWidth(60) self.weatherLabel.setMaximumWidth(60) self.weatherLabel.setCursor(QCursor(Qt.PointingHandCursor)) self.weatherLabel.setObjectName("weatherLabel") # ----添加到布局中 headLayout.addWidget(self.headLabel, 0, Qt.AlignLeft) headLayout.addWidget(self.headInfoWidget, 0, Qt.AlignCenter) headLayout.addWidget(self.weatherLabel, 0, Qt.AlignRight) # 搜索输入框 self.searchEdit = LineEdit(self.bgWidget) self.searchEdit.setFrame(False) # self.searchEdit.setClearButtonEnabled(True) self.searchEdit.setObjectName("searchEdit") # tab self.tabWidget = QTabWidget(self.bgWidget) self.tabWidget.setUsesScrollButtons(False) # 取消两个切换按钮 self.tabWidget.setDocumentMode(True) # 取消边框 self.tabWidget.setObjectName("tabWidget") # --分组 self.tabGroup = QWidget(self.tabWidget) self.tabGroup.setObjectName("tabGroup") # ----分组布局 groupVerticalLayout = QVBoxLayout(self.tabGroup) groupVerticalLayout.setSpacing(0) groupVerticalLayout.setContentsMargins(0, 0, 0, 0) groupVerticalLayout.setObjectName("groupVerticalLayout") # ------分组list控件 self.groupTreeWidget = QTreeWidget(self.tabGroup) self.groupTreeWidget.setFrameShape(QFrame.NoFrame) self.groupTreeWidget.setFrameStyle(QFrame.NoFrame) self.groupTreeWidget.setLineWidth(0) self.groupTreeWidget.setIndentation(0) self.groupTreeWidget.setRootIsDecorated(False) self.groupTreeWidget.setExpandsOnDoubleClick(False) self.groupTreeWidget.header().setVisible(False) self.groupTreeWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.groupTreeWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.groupTreeWidget.setObjectName("groupTreeWidget") # ----添加到布局 groupVerticalLayout.addWidget(self.groupTreeWidget) # --历史 self.tabHistory = QWidget(self.tabWidget) self.tabHistory.setObjectName("tabHistory") # ----历史布局 historyVerticalLayout = QVBoxLayout(self.tabHistory) historyVerticalLayout.setSpacing(0) historyVerticalLayout.setContentsMargins(0, 0, 0, 0) historyVerticalLayout.setObjectName("historyVerticalLayout") # ------历史list控件 self.historyTreeWidget = QTreeWidget(self.tabHistory) self.historyTreeWidget.setFrameShape(QFrame.NoFrame) self.historyTreeWidget.setFrameStyle(QFrame.NoFrame) self.historyTreeWidget.setLineWidth(0) self.historyTreeWidget.setIndentation(0) self.historyTreeWidget.setRootIsDecorated(False) self.historyTreeWidget.setExpandsOnDoubleClick(False) self.historyTreeWidget.header().setVisible(False) self.historyTreeWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.historyTreeWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.historyTreeWidget.setObjectName("historyTreeWidget") # ----添加到布局 historyVerticalLayout.addWidget(self.historyTreeWidget) # 添加到tab中 self.tabWidget.addTab(self.tabGroup, "") self.tabWidget.addTab(self.tabHistory, "") # 整体布局 verticalLayout = QVBoxLayout(self.bgWidget) verticalLayout.setSpacing(0) verticalLayout.setContentsMargins(0, 0, 0, 0) verticalLayout.setObjectName("verticalLayout") verticalLayout.addWidget(self.topWidget) verticalLayout.addWidget(self.headWidget) verticalLayout.addWidget(self.searchEdit) verticalLayout.addWidget(self.tabWidget) # bg layout = QVBoxLayout(Ucics) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.bgWidget) # 初始化一些设置 _translate = QCoreApplication.translate Ucics.setWindowTitle(_translate("Ucics", "UCICS")) self.tabWidget.setCurrentIndex(0) self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabGroup), _translate("tabGroup", "分组")) self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tabHistory), _translate("tabHistory", "历史")) QMetaObject.connectSlotsByName(Ucics)
def __init__(self, mode=RegExpMode, parent=None): """ Constructor @param mode mode of the dialog (one of RegExpMode, WildcardMode, W3CMode) @param parent parent widget (QWidget) """ super(QRegExpWizardCharactersDialog, self).__init__(parent) self.setupUi(self) self.__mode = mode if mode == QRegExpWizardCharactersDialog.WildcardMode: self.predefinedBox.setEnabled(False) self.predefinedBox.hide() elif mode == QRegExpWizardCharactersDialog.RegExpMode: self.w3cInitialIdentifierCheckBox.hide() self.w3cNonInitialIdentifierCheckBox.hide() self.w3cNmtokenCheckBox.hide() self.w3cNonNmtokenCheckBox.hide() elif mode == QRegExpWizardCharactersDialog.W3CMode: self.__initCharacterSelectors() self.comboItems = [] self.singleComboItems = [] # these are in addition to the above self.comboItems.append((self.tr("Normal character"), "-c")) if mode == QRegExpWizardCharactersDialog.RegExpMode: self.comboItems.append((self.tr( "Unicode character in hexadecimal notation"), "-h")) self.comboItems.append((self.tr( "ASCII/Latin1 character in octal notation"), "-o")) self.singleComboItems.append(("---", "-i")) self.singleComboItems.append( (self.tr("Bell character (\\a)"), "\\a")) self.singleComboItems.append( (self.tr("Page break (\\f)"), "\\f")) self.singleComboItems.append( (self.tr("Line feed (\\n)"), "\\n")) self.singleComboItems.append( (self.tr("Carriage return (\\r)"), "\\r")) self.singleComboItems.append( (self.tr("Horizontal tabulator (\\t)"), "\\t")) self.singleComboItems.append( (self.tr("Vertical tabulator (\\v)"), "\\v")) elif mode == QRegExpWizardCharactersDialog.W3CMode: self.comboItems.append((self.tr( "Unicode character in hexadecimal notation"), "-h")) self.comboItems.append((self.tr( "ASCII/Latin1 character in octal notation"), "-o")) self.singleComboItems.append(("---", "-i")) self.singleComboItems.append( (self.tr("Line feed (\\n)"), "\\n")) self.singleComboItems.append( (self.tr("Carriage return (\\r)"), "\\r")) self.singleComboItems.append( (self.tr("Horizontal tabulator (\\t)"), "\\t")) self.singleComboItems.append(("---", "-i")) self.singleComboItems.append( (self.tr("Character Category"), "-ccp")) self.singleComboItems.append( (self.tr("Character Block"), "-cbp")) self.singleComboItems.append( (self.tr("Not Character Category"), "-ccn")) self.singleComboItems.append( (self.tr("Not Character Block"), "-cbn")) self.charValidator = QRegExpValidator(QRegExp(".{0,1}"), self) self.hexValidator = QRegExpValidator(QRegExp("[0-9a-fA-F]{0,4}"), self) self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self) # generate dialog part for single characters self.singlesBoxLayout = QVBoxLayout(self.singlesBox) self.singlesBoxLayout.setObjectName("singlesBoxLayout") self.singlesBoxLayout.setSpacing(6) self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesBox.setLayout(self.singlesBoxLayout) self.singlesView = QScrollArea(self.singlesBox) self.singlesView.setObjectName("singlesView") self.singlesBoxLayout.addWidget(self.singlesView) self.singlesItemsBox = QWidget(self) self.singlesView.setWidget(self.singlesItemsBox) self.singlesItemsBox.setObjectName("singlesItemsBox") self.singlesItemsBox.setMinimumWidth(1000) self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox) self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesItemsBoxLayout.setSpacing(6) self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout) self.singlesEntries = [] self.__addSinglesLine() hlayout0 = QHBoxLayout() hlayout0.setContentsMargins(0, 0, 0, 0) hlayout0.setSpacing(6) hlayout0.setObjectName("hlayout0") self.moreSinglesButton = QPushButton( self.tr("Additional Entries"), self.singlesBox) self.moreSinglesButton.setObjectName("moreSinglesButton") hlayout0.addWidget(self.moreSinglesButton) hspacer0 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout0.addItem(hspacer0) self.singlesBoxLayout.addLayout(hlayout0) self.moreSinglesButton.clicked.connect(self.__addSinglesLine) # generate dialog part for character ranges self.rangesBoxLayout = QVBoxLayout(self.rangesBox) self.rangesBoxLayout.setObjectName("rangesBoxLayout") self.rangesBoxLayout.setSpacing(6) self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesBox.setLayout(self.rangesBoxLayout) self.rangesView = QScrollArea(self.rangesBox) self.rangesView.setObjectName("rangesView") self.rangesBoxLayout.addWidget(self.rangesView) self.rangesItemsBox = QWidget(self) self.rangesView.setWidget(self.rangesItemsBox) self.rangesItemsBox.setObjectName("rangesItemsBox") self.rangesItemsBox.setMinimumWidth(1000) self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox) self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesItemsBoxLayout.setSpacing(6) self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout) self.rangesEntries = [] self.__addRangesLine() hlayout1 = QHBoxLayout() hlayout1.setContentsMargins(0, 0, 0, 0) hlayout1.setSpacing(6) hlayout1.setObjectName("hlayout1") self.moreRangesButton = QPushButton( self.tr("Additional Entries"), self.rangesBox) self.moreSinglesButton.setObjectName("moreRangesButton") hlayout1.addWidget(self.moreRangesButton) hspacer1 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout1.addItem(hspacer1) self.rangesBoxLayout.addLayout(hlayout1) self.moreRangesButton.clicked.connect(self.__addRangesLine)
class WinsWidget(QWidget): """主窗口。""" def __init__(self, parent=None): logger.debug("_init__:begin") super(WinsWidget, self).__init__(parent) self.setObjectName('winsWidget') self.setWindowFlags(Qt.FramelessWindowHint) self.setWindowTitle('wins的小工具') self.setWindowIcon(QIcon('icons/titleIcon.png')) self.resize(1000, 650) # 按钮start. self.btn_exit = QPushButton(self) self.btn_min = QPushButton(self) self.btn_max = QPushButton(self) self.btn_login = QPushButton("Unlogin", self) self.btn_search = QPushButton(self) self.btn_qry_stock = QPushButton(self) self.btn_add_stock = QPushButton(self) self.btn_del_stock = QPushButton(self) # 按钮end. # 标签start. self.lbe_pic = QLabel(self) self.header_hr = QLabel(self) self.header_icon = QLabel(self) self.header_text = QLabel(self) self.spacing = QLabel(self) self.spacing2 = QLabel(self) self.spacing3 = QFrame() self.spacing4 = QFrame() # ------- # 输入框start. self.search_line = QLineEdit(self) # 输入框end. # ------- # 列表框start. self.stockTableView = QtWidgets.QTableView(self) self.stockTableModel=QSqlTableModel(self) # ------- # 布局与属性设置。 self.mainLayout = QGridLayout() self.topLayout = QHBoxLayout() self.leftLayout = QVBoxLayout() self.centerLayout = QHBoxLayout() self.rightLayout = QVBoxLayout() self.rightLayout1 = QHBoxLayout() self.rightLayout2 = QVBoxLayout() self.rightLayout21 = QHBoxLayout() self.bottomLayout = QHBoxLayout() self.bottomLayout1 = QVBoxLayout() self.playLayout = QHBoxLayout() self.set_buttons() self.set_labels() self.set_lines() self.load_stock_tableview() # ------- # 其他功能。 self.load_login() self.setLayout(self.set_layouts()) logger.debug("_init__:end") # 设置布局。 def set_layouts(self): """ 布局。 """ # 头布局start. logger.debug("set_layouts:begin") self.topLayout.setObjectName('Headerhbox') self.topLayout.addWidget(self.header_icon) self.topLayout.addWidget(self.header_text) self.topLayout.addWidget(self.spacing2) self.topLayout.addWidget(self.search_line) self.topLayout.addWidget(self.btn_search) self.topLayout.addStretch(1) self.topLayout.addWidget(self.lbe_pic) self.topLayout.addWidget(self.btn_login) self.topLayout.addWidget(self.spacing) self.topLayout.addWidget(self.btn_min) self.topLayout.addWidget(self.btn_max) self.topLayout.addWidget(self.btn_exit) self.topLayout.setSpacing(7) # ------- self.mainLayout.addLayout(self.topLayout, 0, 0, Qt.AlignTop) self.mainLayout.addWidget(self.header_hr, 1, 0, Qt.AlignTop) # 头布局end. # -------- # 中心布局start. # 左部分start. self.leftLayout.addWidget(self.btn_qry_stock) self.leftLayout.addWidget(self.btn_add_stock) self.leftLayout.addWidget(self.btn_del_stock) self.leftLayout.setSpacing(10) # 左部分end。 # ------- # 右部分end. # ------- self.centerLayout.addLayout(self.leftLayout) self.centerLayout.addWidget(self.spacing3) self.centerLayout.addWidget(self.stockTableView) self.centerLayout.addLayout(self.rightLayout) self.centerLayout.setStretch(0, 180) self.centerLayout.setStretch(1, 1) self.centerLayout.setStretch(2, 0) self.centerLayout.setStretch(3, 830) self.centerLayout.setStretch(4, 0) self.mainLayout.addLayout(self.centerLayout, 2, 0, Qt.AlignTop | Qt.AlignLeft) # 中心布局end. # ------- # 下部分start. self.mainLayout.addWidget(self.spacing4, 3, 0, Qt.AlignTop) self.mainLayout.addLayout(self.bottomLayout, 3, 0, Qt.AlignBottom) # self.mainLayout.addWidget(self.current_list, 2, 0, Qt.AlignBottom | Qt.AlignRight) # 下部分end. self.mainLayout.setRowStretch(1, 1) self.mainLayout.setRowStretch(2, 20) self.mainLayout.setRowStretch(3, 3) logger.debug("set_layouts:end") return self.mainLayout def set_labels(self): """ 全部的标签组件。 """ p = QPixmap() p.load('icons/unlogin.png') p2 = QPixmap() p2.load('icons/titleIcon.png') # 头部装饰start。 self.lbe_pic.setObjectName("headpic") self.lbe_pic.setPixmap(p.scaled(40, 40)) self.header_hr.setObjectName('Headerhr') self.header_hr.setText("推荐") self.header_icon.setObjectName('HIcon') self.header_icon.setPixmap(p2.scaled(50, 50)) self.header_text.setObjectName('HText') self.header_text.setText(" Music") def load_login(self): """ 登录 """ logger.debug("load_login:"******""" 退出 """ logger.debug("quit_login:"******""" 加载表格 """ logger.debug("load_stock_tableview:begin") self.stockTableModel.setTable("t1") self.stockTableModel.select() self.stockTableModel.setEditStrategy(QSqlTableModel.OnManualSubmit) # 数据更新的策略,详细可以查看Qt文档 self.stockTableView.setModel(self.stockTableModel) self.stockTableView.setSelectionBehavior(QAbstractItemView.SelectRows) self.stockTableView.setSelectionMode(QAbstractItemView.ExtendedSelection) #self.stockTableView.setGeometry(QtCore.QRect(290, 110, 471, 221)) self.stockTableView.setObjectName("stockTableView") logger.debug("load_stock_tableview:end") def set_buttons(self): """ 全部的按钮组件。 """ # 退出。 logger.debug("set_buttons:begin") self.btn_exit.setObjectName('exit') self.btn_exit.setText('×') self.btn_exit.clicked.connect(self.close) self.btn_exit.setToolTip('退出') # 最小化。 self.btn_min.setObjectName('mini') self.btn_min.setText('-') self.btn_min.clicked.connect(self.showMinimized) self.btn_min.setToolTip('最小化') # 最大化。 self.btn_max.setObjectName('maxi') self.btn_max.setText('□') self.btn_max.setToolTip('^_^此功能已上火星') # 登陆。 self.btn_login.setObjectName('login') self.btn_login.setToolTip('登陆') # 搜索。 self.btn_search.setObjectName('searchBtn') self.btn_search.resize(48, 48) # 查询。 self.btn_qry_stock.setObjectName('btnQryStock') self.btn_qry_stock.setIcon(QIcon('icons/qryBtn.png')) self.btn_qry_stock.setText("查询") self.btn_qry_stock.clicked.connect(self.qryStockFunc) # 增加。 self.btn_add_stock.setObjectName('btnAddStock') self.btn_add_stock.setIcon(QIcon('icons/addBtn.png')) self.btn_add_stock.setText("增加") self.btn_add_stock.clicked.connect(self.addStockFunc) # 删除。 self.btn_del_stock.setObjectName('btnDelStock') self.btn_del_stock.setIcon(QIcon('icons/delBtn.png')) self.btn_del_stock.setText("删除") self.btn_del_stock.clicked.connect(self.delStockFunc) logger.debug("set_buttons:end") def set_lines(self): """ 输入框。 """ logger.debug("set_lines:begin") self.search_line.setObjectName('SearchLine') self.search_line.setPlaceholderText('搜索') logger.debug("set_lines:end") def set_sliders(self): """ 滚动组件。 """ logger.debug("set_sliders:begin") self.slider.setObjectName("slider") self.slider.setOrientation(Qt.Horizontal) logger.debug("set_sliders:end") def hide_index(self): """ 隐藏主页, 显示歌单详细信息。 """ logger.debug("hide_index") def show_index(self): """ 显示主页。 """ logger.debug("show_index") # 切换页面end. """重写鼠标事件,实现窗口拖动。""" def mousePressEvent(self, event): logger.debug("mousePressEvent:") if event.buttons() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos()-self.pos() event.accept() def mouseMoveEvent(self, event): logger.debug("mouseMoveEvent:") try: if event.buttons() and Qt.LeftButton: self.move(event.globalPos()-self.m_DragPosition) event.accept() except AttributeError: pass def mouseReleaseEvent(self, event): logger.debug("mouseReleaseEvent:") self.m_drag = False """按键绑定。。""" def keyPressEvent(self, event): logger.debug("keyPressEvent:") if event.key() == Qt.Key_Enter or event.key() == Qt.Key_Enter-1: self.song_search() """退出窗口时做的一些事。""" def closeEvent(self, event): # 退出时保存歌曲列表缓存。 logger.debug("showEvent:") """界面开始前的一些事。""" def showEvent(self, event): logger.debug("showEvent:") #查询按钮关联的槽函数 def qryStockFunc(self): #self.db.execSQL("select * from t1") logger.debug("qryStockFunc:") #插入按钮关联的槽函数 def addStockFunc(self): logger.debug("addStockFunc:begin") f1=random.randint(1, 99) self.myTableModel.insertRows(0, 1) self.myTableModel.setData(self.myTableModel.index(0, 0), f1) self.myTableModel.setData(self.myTableModel.index(0, 1), "test") self.myTableModel.submitAll() logger.debug("addStockFunc:end") def delStockFunc(self): logger.debug("delStockFunc:begin") rs=list(map(lambda x:x.row(),self.myTableView.selectedIndexes())) if len(rs)==0: QMessageBox.information(self,'提醒','请先选中至少一行,再点击此按钮!') return for i in reversed(rs): self.myTableModel.removeRows(i,1) self.myTableModel.submitAll() logger.debug("delStockFunc:end")
class ImageDetailArea(QWidget): # signal imageLoaded = pyqtSignal() imageCleared = pyqtSignal() # static strings strings = { 'filename': 'filename: %s (%s)', 'size': 'size: %d x %d', 'component': 'Components (%d in total)', 'quantization': 'Quantization tables (%d in total)', 'huffman': 'Huffman tables (%d for DC, %d for AC)', 'showedComponentsInfo': [ 'dc_tbl_no', 'ac_tbl_no', 'quant_tbl_no', 'h_samp_factor', 'v_samp_factor', ], } def __init__(self, parent=None): super().__init__(parent) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setObjectName("verticalLayout") # title self.lb_title = QLabel(self) self.lb_title.setAlignment(Qt.AlignCenter) self.lb_title.setObjectName("lb_title") self.verticalLayout.addWidget(self.lb_title) # filename && size self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.lb_filename = QLabel(self) self.lb_filename.setObjectName("lb_filename") self.horizontalLayout.addWidget(self.lb_filename) self.lb_size = QLabel(self) self.lb_size.setObjectName("lb_size") self.horizontalLayout.addWidget(self.lb_size) self.verticalLayout.addLayout(self.horizontalLayout) # image preview self.lb_image = ImageLabel(self) self.lb_image.setMinimumSize(QSize(250, 250)) self.lb_image.setAlignment(Qt.AlignCenter) self.lb_image.setObjectName("lb_image") self.verticalLayout.addWidget(self.lb_image) # components self.lb_components = QLabel(self) self.lb_components.setObjectName("lb_components") self.verticalLayout.addWidget(self.lb_components) self.treeWidget_components = AdaptiveTreeWidget(self) self.treeWidget_components.setUniformRowHeights(True) self.treeWidget_components.setObjectName("treeWidget_components") self.treeWidget_components.setColumnCount(3) self.treeWidget_components.headerItem().setTextAlignment( 0, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_components.headerItem().setTextAlignment( 1, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_components.headerItem().setText(0, "ID") self.treeWidget_components.headerItem().setText(1, "Property") self.treeWidget_components.headerItem().setText(2, "Value") self.treeWidget_components.header().setSectionResizeMode( QHeaderView.ResizeToContents ) self.verticalLayout.addWidget(self.treeWidget_components) # quant tables self.lb_quantTbls = QLabel(self) self.lb_quantTbls.setObjectName("lb_quantTbls") self.verticalLayout.addWidget(self.lb_quantTbls) self.treeWidget_quantTbls = AdaptiveTreeWidget(self) self.treeWidget_quantTbls.setObjectName("treeWidget_quantTbls") self.treeWidget_quantTbls.setColumnCount(3) self.treeWidget_quantTbls.headerItem().setTextAlignment( 0, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_quantTbls.headerItem().setTextAlignment( 1, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_quantTbls.headerItem().setText(0, "ID") self.treeWidget_quantTbls.headerItem().setText(1, "Property") self.treeWidget_quantTbls.headerItem().setText(2, "Value") self.verticalLayout.addWidget(self.treeWidget_quantTbls) # huffman tables self.lb_huffTbls = QLabel(self) self.lb_huffTbls.setObjectName("lb_huffTbls") self.verticalLayout.addWidget(self.lb_huffTbls) self.treeWidget_huffTbls = AdaptiveTreeWidget(self) self.treeWidget_huffTbls.setObjectName("treeWidget_huffTbls") self.treeWidget_huffTbls.setColumnCount(3) self.treeWidget_huffTbls.headerItem().setTextAlignment( 0, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_huffTbls.headerItem().setTextAlignment( 1, Qt.AlignLeft | Qt.AlignVCenter ) self.treeWidget_huffTbls.headerItem().setText(0, "ID") self.treeWidget_huffTbls.headerItem().setText(1, "Property") self.treeWidget_huffTbls.headerItem().setText(2, "Value") self.verticalLayout.addWidget(self.treeWidget_huffTbls) self.setTitle('( None )') self.clear() def setTitle(self, title): self.lb_title.setText(title) def clear(self): self.image = None self.lb_filename.setText( self.strings['filename'] % ('', 'NO image loaded') ) self.lb_size.setText( self.strings['size'] % (0, 0) ) self.lb_image.clear() self.lb_components.setText( self.strings['component'] % 0 ) self.treeWidget_components.clear() self.lb_quantTbls.setText( self.strings['quantization'] % 0 ) self.treeWidget_quantTbls.clear() self.lb_huffTbls.setText( self.strings['huffman'] % (0, 0) ) self.treeWidget_huffTbls.clear() self.imageCleared.emit() def setImage(self, image): self.clear() self.image = image self.lb_filename.setText( self.strings['filename'] % (image.filename, 'original') ) self.lb_size.setText( self.strings['size'] % image.size ) self.lb_image.setImageMemSrc(image, 300, 300) # components for comp in image.comp_infos: topItem = QTreeWidgetItem( self.treeWidget_components, [str(comp['component_id']), '', ''] ) for key in self.strings['showedComponentsInfo']: QTreeWidgetItem(topItem, ['', key, str(comp[key])]) self.lb_components.setText( self.strings['component'] % len(image.comp_infos) ) # quantization tables self.lb_quantTbls.setText( self.strings['quantization'] % len(image.quant_tbls) ) for i, quant_tbl in enumerate(image.quant_tbls): topItem = QTreeWidgetItem( self.treeWidget_quantTbls, [str(i), '', ''] ) for key in quant_tbl: QTreeWidgetItem(topItem, ['', key, str(quant_tbl[key])]) # huffman tables self.lb_huffTbls.setText( self.strings['huffman'] % ( len(image.dc_huff_tbls), len(image.ac_huff_tbls) ) ) for i, hufftbl in enumerate(image.dc_huff_tbls): topItem = QTreeWidgetItem( self.treeWidget_huffTbls, [str(i), 'type', 'DC'] ) for key in hufftbl: QTreeWidgetItem(topItem, ['', key, str(hufftbl[key])]) for i, hufftbl in enumerate(image.ac_huff_tbls): topItem = QTreeWidgetItem( self.treeWidget_huffTbls, [str(i), 'type', 'AC'] ) for key in hufftbl: QTreeWidgetItem(topItem, ['', key, str(hufftbl[key])]) self.imageLoaded.emit()
class MyCurrencyBox(QFrame): _amount = None def __init__(self, *args): super(MyCurrencyBox, self).__init__(*args) Lumberjack.info('spawning a << MyCurrencyBox >>') self.currencyBoxlayout = QHBoxLayout(self) self.currencyBoxlayout.setObjectName("currencyBoxlayout") self.currencyLabel = QLabel('€') self.euroLineEdit = QLineEdit() self.euroLineEdit.setText('0') self.euroLineEdit.setAlignment(Qt.AlignRight) self.euroLineEdit.setObjectName("euroLineEdit") euroValidator = QIntValidator() self.euroLineEdit.setValidator(euroValidator) self.euroLineEdit.setMaxLength(6) self.commaLabel = QLabel(',') self.centsLineEdit = QLineEdit() self.centsLineEdit.setText('00') self.euroLineEdit.setAlignment(Qt.AlignRight) self.centsLineEdit.setObjectName("centsLineEdit") centsValidator = QIntValidator(0, 99) self.centsLineEdit.setValidator(centsValidator) self.centsLineEdit.setMaxLength(2) spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) spacerItem2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.currencyBoxlayout.addItem(spacerItem1) self.currencyBoxlayout.addWidget(self.currencyLabel) self.currencyBoxlayout.addWidget(self.euroLineEdit) self.currencyBoxlayout.addWidget(self.commaLabel) self.currencyBoxlayout.addWidget(self.centsLineEdit) self.currencyBoxlayout.addItem(spacerItem2) self.centsLineEdit.textChanged.connect(self.on_text_input) self.euroLineEdit.textChanged.connect(self.on_text_input) def getAmount(self): Lumberjack.info('< MyCurrencyBox > - -> (getAmount)') if self._amount is None: return None euros = self.euroLineEdit.text() cents = self.centsLineEdit.text() full_amount = euros + cents self._amount = int(full_amount) return self._amount def setAmount(self, amount): Lumberjack.info('< MyCurrencyBox > - -> (setAmount)') if amount is None: self._amount = None euros = '0' cents = '00' else: euros = str(amount)[:-2] if euros == '': euros = '0' cents = str(amount)[-2:] if cents == '0': cents = '00' self.euroLineEdit.setText(euros) self.centsLineEdit.setText(cents) self._amount = amount amount = pyqtProperty(int, fget=getAmount, fset=setAmount) def on_text_input(self): Lumberjack.info('< MyCurrencyBox {}> - -> (on_text_input)') euros = self.euroLineEdit.text() cents = self.centsLineEdit.text() full_amount = euros + cents self._amount = int(full_amount)
class StringsEditorMainWindow(QMainWindow): def __init__(self): super().__init__() self.setup_ui() self.stringfile = None self.reset_in_process = False path = get_default_path() if path is None: self.default_path = "" else: self.default_path = path self.strings_list.currentItemChanged.connect(self.action_listwidget_change_item) self.button_set_message.pressed.connect(self.action_button_set_message) self.button_add_message.pressed.connect(self.action_button_add_message) self.button_remove_message.pressed.connect(self.action_button_delete_message) def reset(self): self.reset_in_process = True self.stringfile = None self.strings_list.clearSelection() self.strings_list.clear() self.textedit_content.clear() self.lineedit_path.clear() self.lineedit_playtime.clear() self.lineedit_audioname.clear() self.reset_in_process = False def action_button_add_message(self): if self.stringfile is not None: newmessage = Message(strings=[b"", b"", b"", b""], audioplaytime=0.0) self.stringfile.messages.append(newmessage) i = len(self.stringfile.messages) - 1 entry = BWEntityEntry(i, "({0}): '{1}'-'{2}'".format(i, newmessage.get_path(), newmessage.get_message())) self.strings_list.addItem(entry) self.strings_list.setCurrentRow(i) def action_button_set_message(self): print("I was pressed") current = self.strings_list.currentItem() if current is not None and self.strings_list is not None: try: msg = self.stringfile.messages[current.xml_ref] print(current) msg.set_path(self.lineedit_path.text()) msg.set_name(self.lineedit_audioname.text()) msg.playtime = float(self.lineedit_playtime.text()) msg.set_message(self.textedit_content.toPlainText()) current.setText("({0}): '{1}'-'{2}'".format(current.xml_ref, msg.get_path(), msg.get_message())) except: traceback.print_exc() def action_button_delete_message(self): if self.stringfile is not None: lastindex = len(self.stringfile.messages) - 1 lastmessage = self.stringfile.messages.pop() item = self.strings_list.takeItem(lastindex) self.strings_list.removeItemWidget(item) self.strings_list.setCurrentRow(lastindex-1) self.statusbar.showMessage("DELETED: ({0}) {1}".format(lastindex, trim_message(lastmessage.get_message()))) def action_listwidget_change_item(self, current, previous): if current is not None: print(current.xml_ref) msg = self.stringfile.messages[current.xml_ref] self.lineedit_audioname.setText(msg.get_name()) self.lineedit_path.setText(msg.get_path()) self.lineedit_playtime.setText(str(msg.playtime)) self.textedit_content.setText(msg.get_message()) def button_load_strings(self): try: print("ok", self.default_path) self.xmlPath = "" filepath, choosentype = QFileDialog.getOpenFileName( self, "Open File", self.default_path, "BW string files (*.str);;All files (*)") print("doooone") if filepath: print("resetting") self.reset() print("done") with open(filepath, "rb") as f: try: self.stringfile = BWLanguageFile(f) for i, msg in enumerate(self.stringfile.messages): entry = BWEntityEntry(i, "({0}): '{1}'-'{2}'".format(i, msg.get_path(), msg.get_message())) self.strings_list.addItem(entry) pass self.default_path = filepath except Exception as error: print("error", error) traceback.print_exc() except Exception as er: print("errrorrr", error) traceback.print_exc() print("loaded") def button_save_strings(self): if self.stringfile is not None: filepath, choosentype = QFileDialog.getSaveFileName( self, "Save File", self.default_path, "BW level files (*.str);;All files (*)") print(filepath, "saved") if filepath: with open(filepath, "wb") as f: self.stringfile.write(f) self.default_path = filepath set_default_path(filepath) else: pass # no level loaded, do nothing def setup_ui(self): self.setObjectName("MainWindow") self.resize(820, 760) self.setMinimumSize(QSize(720, 560)) self.setWindowTitle("BW-StringsEdit") self.centralwidget = QWidget(self) self.centralwidget.setObjectName("centralwidget") self.setCentralWidget(self.centralwidget) self.horizontalLayout = QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.strings_list = QListWidget(self.centralwidget) self.horizontalLayout.addWidget(self.strings_list) self.vertLayoutWidget = QWidget(self.centralwidget) self.verticalLayout = QVBoxLayout(self.vertLayoutWidget) self.button_add_message = QPushButton(self.centralwidget) self.button_remove_message = QPushButton(self.centralwidget) self.button_set_message = QPushButton(self.centralwidget) self.button_add_message.setText("Add Message") self.button_remove_message.setText("Delete Last Message") self.button_set_message.setText("Set Message Content") self.lineedit_path = QLineEdit(self.centralwidget) self.lineedit_audioname = QLineEdit(self.centralwidget) self.lineedit_playtime = QLineEdit(self.centralwidget) self.textedit_content = QTextEdit(self.centralwidget) for widget in ( self.button_remove_message, self.button_add_message, self.button_set_message, self.lineedit_path, self.lineedit_audioname, self.lineedit_playtime, self.textedit_content): self.verticalLayout.addWidget(widget) self.horizontalLayout.addWidget(self.vertLayoutWidget) self.menubar = self.menuBar()#QMenuBar(self) #self.menubar.setGeometry(QRect(0, 0, 820, 30)) #self.menubar.setObjectName("menubar") self.file_menu = self.menubar.addMenu("File")#QMenu(self.menubar) self.file_menu.setObjectName("menuLoad") #self.menubar.addMenu(self.file_menu) self.file_load_action = QAction("Load", self) self.file_load_action.triggered.connect(self.button_load_strings) self.file_menu.addAction(self.file_load_action) self.file_save_action = QAction("Save", self) self.file_save_action.triggered.connect(self.button_save_strings) self.file_menu.addAction(self.file_save_action) self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) #self.setMenuBar(self.menubar) print("done")
def __init__(self, parent=None): """ Constructor @param parent reference to the parent widget (QWidget) """ super(QRegularExpressionWizardCharactersDialog, self).__init__(parent) self.setupUi(self) self.__initCharacterSelectors() self.comboItems = [] self.singleComboItems = [] # these are in addition to the above self.comboItems.append((self.tr("Normal character"), "-c")) self.comboItems.append((self.tr( "Unicode character in hexadecimal notation"), "-h")) self.comboItems.append((self.tr( "ASCII/Latin1 character in octal notation"), "-o")) self.singleComboItems.extend([ ("---", "-i"), (self.tr("Bell character (\\a)"), "\\a"), (self.tr("Escape character (\\e)"), "\\e"), (self.tr("Page break (\\f)"), "\\f"), (self.tr("Line feed (\\n)"), "\\n"), (self.tr("Carriage return (\\r)"), "\\r"), (self.tr("Horizontal tabulator (\\t)"), "\\t"), ("---", "-i"), (self.tr("Character Category"), "-ccp"), (self.tr("Special Character Category"), "-csp"), (self.tr("Character Block"), "-cbp"), (self.tr("POSIX Named Set"), "-psp"), (self.tr("Not Character Category"), "-ccn"), (self.tr("Not Character Block"), "-cbn"), (self.tr("Not Special Character Category"), "-csn"), (self.tr("Not POSIX Named Set"), "-psn"), ]) self.charValidator = QRegExpValidator(QRegExp(".{0,1}"), self) self.hexValidator = QRegExpValidator(QRegExp("[0-9a-fA-F]{0,4}"), self) self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self) # generate dialog part for single characters self.singlesBoxLayout = QVBoxLayout(self.singlesBox) self.singlesBoxLayout.setObjectName("singlesBoxLayout") self.singlesBoxLayout.setSpacing(6) self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesBox.setLayout(self.singlesBoxLayout) self.singlesView = QScrollArea(self.singlesBox) self.singlesView.setObjectName("singlesView") self.singlesBoxLayout.addWidget(self.singlesView) self.singlesItemsBox = QWidget(self) self.singlesView.setWidget(self.singlesItemsBox) self.singlesItemsBox.setObjectName("singlesItemsBox") self.singlesItemsBox.setMinimumWidth(1000) self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox) self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.singlesItemsBoxLayout.setSpacing(6) self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout) self.singlesEntries = [] self.__addSinglesLine() hlayout0 = QHBoxLayout() hlayout0.setContentsMargins(0, 0, 0, 0) hlayout0.setSpacing(6) hlayout0.setObjectName("hlayout0") self.moreSinglesButton = QPushButton( self.tr("Additional Entries"), self.singlesBox) self.moreSinglesButton.setObjectName("moreSinglesButton") hlayout0.addWidget(self.moreSinglesButton) hspacer0 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout0.addItem(hspacer0) self.singlesBoxLayout.addLayout(hlayout0) self.moreSinglesButton.clicked.connect(self.__addSinglesLine) # generate dialog part for character ranges self.rangesBoxLayout = QVBoxLayout(self.rangesBox) self.rangesBoxLayout.setObjectName("rangesBoxLayout") self.rangesBoxLayout.setSpacing(6) self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesBox.setLayout(self.rangesBoxLayout) self.rangesView = QScrollArea(self.rangesBox) self.rangesView.setObjectName("rangesView") self.rangesBoxLayout.addWidget(self.rangesView) self.rangesItemsBox = QWidget(self) self.rangesView.setWidget(self.rangesItemsBox) self.rangesItemsBox.setObjectName("rangesItemsBox") self.rangesItemsBox.setMinimumWidth(1000) self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox) self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6) self.rangesItemsBoxLayout.setSpacing(6) self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout) self.rangesEntries = [] self.__addRangesLine() hlayout1 = QHBoxLayout() hlayout1.setContentsMargins(0, 0, 0, 0) hlayout1.setSpacing(6) hlayout1.setObjectName("hlayout1") self.moreRangesButton = QPushButton( self.tr("Additional Entries"), self.rangesBox) self.moreSinglesButton.setObjectName("moreRangesButton") hlayout1.addWidget(self.moreRangesButton) hspacer1 = QSpacerItem( 30, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) hlayout1.addItem(hspacer1) self.rangesBoxLayout.addLayout(hlayout1) self.moreRangesButton.clicked.connect(self.__addRangesLine)
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.lastyear = int(time.strftime('%Y', time.localtime(time.time()))) - 1 self.in_parameters = {u'datetime': str(self.lastyear) + u'年', u'target_area': u'绍兴市', u'density_cell': u'10', u'density_class': 10, u'day_cell': u'15', u'day_class': 10, u'out_type': u'tiff'} self.setupUi() def setupUi(self): self.setObjectName("MainWindow") self.setFixedSize(1040, 915) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(sizePolicy) icon = QIcon() icon.addPixmap(QPixmap('./resource/weather-thunder.png'),QIcon.Normal, QIcon.Off) self.setWindowIcon(icon) self.centralwidget = QWidget(self) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.layoutWidget = QWidget(self.centralwidget) self.layoutWidget.setGeometry(QRect(32, 10, 979, 851)) self.layoutWidget.setObjectName("layoutWidget") self.verticalLayout_5 =QVBoxLayout(self.layoutWidget) self.verticalLayout_5.setContentsMargins(0, 0, 0, 0) self.verticalLayout_5.setObjectName("verticalLayout_5") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") spacerItem = QSpacerItem(300, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.datetime_label = QLabel(self.layoutWidget) self.datetime_label.setObjectName("datetime_label") self.horizontalLayout.addWidget(self.datetime_label) self.datetime = QDateEdit(self.layoutWidget) self.datetime.setDateTime(QDateTime(QDate(self.lastyear, 1, 1), QTime(0, 0, 0))) self.datetime.setObjectName("datetime") self.horizontalLayout.addWidget(self.datetime) spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.target_area_label = QLabel(self.layoutWidget) self.target_area_label.setObjectName("target_area_label") self.horizontalLayout.addWidget(self.target_area_label) self.target_area = QComboBox(self.layoutWidget) self.target_area.setObjectName("target_area") self.target_area.addItem("") self.target_area.addItem("") self.target_area.addItem("") self.target_area.addItem("") self.target_area.addItem("") self.target_area.addItem("") self.horizontalLayout.addWidget(self.target_area) spacerItem2 = QSpacerItem(300, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.verticalLayout_5.addLayout(self.horizontalLayout) self.tabWidget = QTabWidget(self.layoutWidget) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth()) self.tabWidget.setSizePolicy(sizePolicy) self.tabWidget.setObjectName("tabWidget") self.density_tab = QWidget() self.density_tab.setObjectName("density_tab") self.verticalLayout_3 =QVBoxLayout(self.density_tab) self.verticalLayout_3.setObjectName("verticalLayout_3") self.verticalLayout_2 =QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.density_cell_label = QLabel(self.density_tab) self.density_cell_label.setObjectName("density_cell_label") self.horizontalLayout_2.addWidget(self.density_cell_label) self.density_cell = QSpinBox(self.density_tab) self.density_cell.setProperty("value", 10) self.density_cell.setObjectName("density_cell") self.horizontalLayout_2.addWidget(self.density_cell) spacerItem3 = QSpacerItem(40, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem3) self.density_class_label = QLabel(self.density_tab) self.density_class_label.setObjectName("density_class_label") self.horizontalLayout_2.addWidget(self.density_class_label) self.density_class = QSpinBox(self.density_tab) self.density_class.setProperty("value", 10) self.density_class.setObjectName("density_class") self.horizontalLayout_2.addWidget(self.density_class) spacerItem4 = QSpacerItem(478, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem4) self.density_mxd = QPushButton(self.density_tab) self.density_mxd.setObjectName("density_mxd") self.horizontalLayout_2.addWidget(self.density_mxd) self.verticalLayout_2.addLayout(self.horizontalLayout_2) self.density_view = QGraphicsView(self.density_tab) self.density_view.setObjectName("density_view") self.verticalLayout_2.addWidget(self.density_view) self.verticalLayout_3.addLayout(self.verticalLayout_2) self.tabWidget.addTab(self.density_tab, "") self.day_tab = QWidget() self.day_tab.setObjectName("day_tab") self.verticalLayout_4 =QVBoxLayout(self.day_tab) self.verticalLayout_4.setObjectName("verticalLayout_4") self.verticalLayout =QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_3 =QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.day_cell_label = QLabel(self.day_tab) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.day_cell_label.sizePolicy().hasHeightForWidth()) self.day_cell_label.setSizePolicy(sizePolicy) self.day_cell_label.setObjectName("day_cell_label") self.horizontalLayout_3.addWidget(self.day_cell_label) self.day_cell = QSpinBox(self.day_tab) self.day_cell.setProperty("value", 15) self.day_cell.setObjectName("day_cell") self.horizontalLayout_3.addWidget(self.day_cell) spacerItem5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem5) self.day_class_label = QLabel(self.day_tab) self.day_class_label.setObjectName("day_class_label") self.horizontalLayout_3.addWidget(self.day_class_label) self.day_class = QSpinBox(self.day_tab) self.day_class.setProperty("value", 10) self.day_class.setObjectName("day_class") self.horizontalLayout_3.addWidget(self.day_class) spacerItem6 = QSpacerItem(478, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem6) self.day_mxd = QPushButton(self.day_tab) self.day_mxd.setObjectName("day_mxd") self.horizontalLayout_3.addWidget(self.day_mxd) self.verticalLayout.addLayout(self.horizontalLayout_3) self.day_view = QGraphicsView(self.day_tab) self.day_view.setObjectName("day_view") self.verticalLayout.addWidget(self.day_view) self.verticalLayout_4.addLayout(self.verticalLayout) self.tabWidget.addTab(self.day_tab, "") self.verticalLayout_5.addWidget(self.tabWidget) self.horizontalLayout_4 =QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.progressBar = QProgressBar(self.layoutWidget) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.progressBar.sizePolicy().hasHeightForWidth()) self.progressBar.setSizePolicy(sizePolicy) self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.horizontalLayout_4.addWidget(self.progressBar) self.execute_button = QPushButton(self.layoutWidget) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.execute_button.sizePolicy().hasHeightForWidth()) self.execute_button.setSizePolicy(sizePolicy) self.execute_button.setObjectName("execute_button") self.horizontalLayout_4.addWidget(self.execute_button) self.verticalLayout_5.addLayout(self.horizontalLayout_4) self.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 1040, 26)) self.menubar.setObjectName("menubar") self.file_menu = QMenu(self.menubar) self.file_menu.setObjectName("file_menu") self.help_menu = QMenu(self.menubar) self.help_menu.setObjectName("help_menu") self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.action_add_data = QAction(self) self.action_add_data.setObjectName("action_add_data") self.action_help = QAction(self) self.action_help.setObjectName("action_help") self.action_about = QAction(self) self.action_about.setObjectName("action_about") self.action_save_pic = QAction(self) self.action_save_pic.setObjectName("action_save_pic") self.file_menu.addAction(self.action_add_data) self.file_menu.addAction(self.action_save_pic) self.help_menu.addAction(self.action_help) self.help_menu.addAction(self.action_about) self.menubar.addAction(self.file_menu.menuAction()) self.menubar.addAction(self.help_menu.menuAction()) self.retranslateUi() self.tabWidget.setCurrentIndex(0) QMetaObject.connectSlotsByName(self) self.center() self.show() self.target_area.activated[str].connect(self.updateTargetArea) self.datetime.dateChanged.connect(self.updateDatetime) self.density_cell.valueChanged.connect(self.updateDensityCell) self.density_class.valueChanged.connect(self.updateDensityClass) self.day_cell.valueChanged.connect(self.updateDayCell) self.day_class.valueChanged.connect(self.updateDayClass) self.action_add_data.triggered.connect(self.addData) self.action_save_pic.triggered.connect(self.savePic) self.action_about.triggered.connect(self.showAbout) self.action_help.triggered.connect(self.showHelp) self.execute_button.clicked.connect(self.execute) self.density_mxd.clicked.connect(self.openMxdDensity) self.day_mxd.clicked.connect(self.openMxdDay) self.density_mxd.setDisabled(True) self.day_mxd.setDisabled(True) self.action_save_pic.setDisabled(True) def execute(self): dir = u"E:/Documents/工作/雷电公报/闪电定位原始文本数据/" + self.in_parameters[u'datetime'] if os.path.exists(dir): datafiles = os.listdir(dir) datafiles = map(lambda x:os.path.join(dir,x),datafiles) self.in_parameters[u'origin_data_path'] = datafiles if not self.in_parameters.has_key(u'origin_data_path'): message = u"请加载%s的数据" % self.in_parameters[u'datetime'] msgBox = QMessageBox() msgBox.setText(message) msgBox.setIcon(QMessageBox.Information) icon = QIcon() icon.addPixmap(QPixmap('./resource/weather-thunder.png'), QIcon.Normal, QIcon.Off) msgBox.setWindowIcon(icon) msgBox.setWindowTitle(" ") msgBox.exec_() return self.execute_button.setDisabled(True) self.execute_button.setText(u'正在制图中……') self.progressBar.setMaximum(0) self.progressBar.setMinimum(0) self.action_add_data.setDisabled(True) self.target_area.setDisabled(True) self.datetime.setDisabled(True) self.density_cell.setDisabled(True) self.density_class.setDisabled(True) self.day_cell.setDisabled(True) self.day_class.setDisabled(True) # for outfile in self.in_parameters[u'origin_data_path']: # infile = # try: # with open(infile, 'w+') as in_f: # for line in in_f: # line = line.replace(u":",":") # in_f.write(line) # except Exception,inst: # print infile self.process_thread = WorkThread() self.process_thread.trigger.connect(self.finished) self.process_thread.beginRun(self.in_parameters) def finished(self): #绘制闪电密度图 ##清除上一次的QGraphicsView对象,防止其记录上一次图片结果,影响显示效果 self.density_view.setAttribute(Qt.WA_DeleteOnClose) self.verticalLayout_2.removeWidget(self.density_view) size = self.density_view.size() self.density_view.close() self.density_view = QGraphicsView(self.density_tab) self.density_view.setObjectName("density_view") self.density_view.resize(size) self.verticalLayout_2.addWidget(self.density_view) densityPic = ''.join([cwd,u'/bulletinTemp/', self.in_parameters[u'datetime'],u'/',self.in_parameters[u'datetime'], self.in_parameters[u'target_area'],u'闪电密度空间分布.tif']) scene = QGraphicsScene() pixmap_density = QPixmap(densityPic) scene.addPixmap(pixmap_density) self.density_view.setScene(scene) scale = float(self.density_view.width()) / pixmap_density.width() self.density_view.scale(scale, scale) #绘制雷暴日图 self.day_view.setAttribute(Qt.WA_DeleteOnClose) self.verticalLayout.removeWidget(self.day_view) size = self.day_view.size() self.day_view.close() self.day_view = QGraphicsView(self.day_tab) self.day_view.setObjectName("day_view") self.day_view.resize(size) self.verticalLayout.addWidget(self.day_view) dayPic = ''.join([cwd,u'/bulletinTemp/', self.in_parameters[u'datetime'],u'/',self.in_parameters[u'datetime'], self.in_parameters[u'target_area'],u'地闪雷暴日空间分布.tif']) pixmap_day = QPixmap(dayPic) scene = QGraphicsScene() scene.addPixmap(pixmap_day) self.day_view.resize(self.density_view.width(),self.density_view.height()) self.day_view.setScene(scene) scale = float(self.day_view.width()) / pixmap_day.width() self.day_view.scale(scale, scale) #处理进度条和执行按钮状态 self.progressBar.setMinimum(0) self.progressBar.setMaximum(100) self.progressBar.setValue(100) self.progressBar.setFormat(u'完成!') self.execute_button.setDisabled(False) self.execute_button.setText(u'执行') #改变一些控件的状态 self.action_add_data.setDisabled(False) self.target_area.setDisabled(False) self.datetime.setDisabled(False) self.density_cell.setDisabled(False) self.density_class.setDisabled(False) self.day_cell.setDisabled(False) self.day_class.setDisabled(False) self.density_mxd.setDisabled(False) self.day_mxd.setDisabled(False) self.action_save_pic.setDisabled(False) def addData(self): fnames = QFileDialog.getOpenFileNames(self, u'请选择原始的电闪数据', u'E:/Documents/工作/雷电公报/闪电定位原始文本数据', 'Text files (*.txt);;All(*.*)') self.in_parameters[u'origin_data_path'] = fnames[0] def savePic(self): densityPic = ''.join([cwd,u'/bulletinTemp/',self.in_parameters[u'datetime'],u'/', self.in_parameters[u'target_area'],'.gdb',u'/',self.in_parameters[u'datetime'], self.in_parameters[u'target_area'],u'闪电密度空间分布.tif']) dayPic = ''.join([cwd,u'/bulletinTemp/',self.in_parameters[u'datetime'],u'/', self.in_parameters[u'target_area'],'.gdb',u'/',self.in_parameters[u'datetime'], self.in_parameters[u'target_area'],u'地闪雷暴日空间分布.tif']) directory = QFileDialog.getExistingDirectory(self,u'请选择图片保存位置', u'E:/Documents/工作/雷电公报', QFileDialog.ShowDirsOnly|QFileDialog.DontResolveSymlinks) dest_density = os.path.join(directory,os.path.basename(densityPic)) dest_day = os.path.join(directory,os.path.basename(dayPic)) if os.path.isfile(dest_day) or os.path.isfile(dest_density): message = u"文件已经存在!" msgBox = QMessageBox() msgBox.setText(message) msgBox.setIcon(QMessageBox.Information) icon = QIcon() icon.addPixmap(QPixmap("./resource/weather-thunder.png"), QIcon.Normal, QIcon.Off) msgBox.setWindowIcon(icon) msgBox.setWindowTitle(" ") msgBox.exec_() return move(dayPic,directory) move(densityPic,directory) def openMxdDay(self): program = u'C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe' src_dir = ''.join([cwd,u'/data/LightningBulletin.gdb']) dest_dir = ''.join([cwd,u"/bulletinTemp/",self.in_parameters[u'datetime'], u"/" , self.in_parameters[u'target_area']]) src_file = ''.join([self.in_parameters[u'target_area'] , u"地闪雷暴日空间分布模板.mxd"]) copy(os.path.join(src_dir,src_file),dest_dir) arguments = [os.path.join(dest_dir,src_file)] self.process = QProcess(self) self.process.start(program,arguments) def openMxdDensity(self): program = u'C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe' src_dir = ''.join([cwd,u'/data/LightningBulletin.gdb']) dest_dir = ''.join([cwd,u"/bulletinTemp/",self.in_parameters[u'datetime'], u"/" , self.in_parameters[u'target_area']]) src_file = ''.join([self.in_parameters[u'target_area'] ,u"闪电密度空间分布模板.mxd"]) copy(os.path.join(src_dir,src_file),dest_dir) arguments = [os.path.join(dest_dir,src_file)] self.process = QProcess(self) self.process.start(program,arguments) def showAbout(self): self.about = About_Dialog() def showHelp(self): program = u'C:/Windows/hh.exe' arguments = [''.join([cwd,'/help/help.CHM'])] self.process = QProcess(self) self.process.start(program,arguments) def updateTargetArea(self, area): self.in_parameters[u'target_area'] = area def updateDatetime(self, date): self.in_parameters[u'datetime'] = str(date.year()) + u'年' if self.in_parameters.has_key(u'origin_data_path'): self.in_parameters.__delitem__(u'origin_data_path') def updateDensityCell(self, cell): self.in_parameters[u'density_cell'] = str(cell) def updateDensityClass(self, nclass): self.in_parameters[u'density_class'] = nclass def updateDayCell(self, cell): self.in_parameters[u'day_cell'] = str(cell) def updateDayClass(self, nclass): self.in_parameters[u'day_class'] = nclass def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) def retranslateUi(self): _translate = QCoreApplication.translate self.setWindowTitle(_translate("MainWindow", "绍兴防雷中心 雷电公报制图")) self.datetime_label.setText(_translate("MainWindow", "年份")) self.datetime.setDisplayFormat(_translate("MainWindow", "yyyy")) self.target_area_label.setText(_translate("MainWindow", "地区")) self.target_area.setItemText(0, _translate("MainWindow", "绍兴市")) self.target_area.setItemText(1, _translate("MainWindow", "柯桥区")) self.target_area.setItemText(2, _translate("MainWindow", "上虞区")) self.target_area.setItemText(3, _translate("MainWindow", "诸暨市")) self.target_area.setItemText(4, _translate("MainWindow", "嵊州市")) self.target_area.setItemText(5, _translate("MainWindow", "新昌县")) self.density_cell_label.setText(_translate("MainWindow", "插值网格大小")) self.density_class_label.setText(_translate("MainWindow", "制图分类数目")) self.density_mxd.setText(_translate("MainWindow", "ArcGIS文档")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.density_tab), _translate("MainWindow", "电闪密度")) self.day_cell_label.setText(_translate("MainWindow", "插值网格大小")) self.day_class_label.setText(_translate("MainWindow", "制图分类数目")) self.day_mxd.setText(_translate("MainWindow", "ArcGIS文档")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.day_tab), _translate("MainWindow", "雷暴日")) self.execute_button.setText(_translate("MainWindow", "执行")) self.file_menu.setTitle(_translate("MainWindow", "文件")) self.help_menu.setTitle(_translate("MainWindow", "帮助")) self.action_add_data.setText(_translate("MainWindow", "加载数据")) self.action_help.setText(_translate("MainWindow", "使用说明")) self.action_about.setText(_translate("MainWindow", "关于")) self.action_save_pic.setText(_translate("MainWindow", "图片另存为"))
def __init__(self, variables, parent=None): """ Constructor @param variables list of template variable names (list of strings) @param parent parent widget of this dialog (QWidget) """ super(TemplateMultipleVariablesDialog, self).__init__(parent) self.TemplateMultipleVariablesDialogLayout = QVBoxLayout(self) self.TemplateMultipleVariablesDialogLayout.setContentsMargins(6, 6, 6, 6) self.TemplateMultipleVariablesDialogLayout.setSpacing(6) self.TemplateMultipleVariablesDialogLayout.setObjectName("TemplateMultipleVariablesDialogLayout") self.setLayout(self.TemplateMultipleVariablesDialogLayout) # generate the scrollarea self.variablesView = QScrollArea(self) self.variablesView.setObjectName("variablesView") self.TemplateMultipleVariablesDialogLayout.addWidget(self.variablesView) self.variablesView.setWidgetResizable(True) self.variablesView.setFrameStyle(QFrame.NoFrame) self.top = QWidget(self) self.variablesView.setWidget(self.top) self.grid = QGridLayout(self.top) self.grid.setContentsMargins(0, 0, 0, 0) self.grid.setSpacing(6) self.top.setLayout(self.grid) # populate the scrollarea with labels and text edits self.variablesEntries = {} row = 0 for var in variables: label = QLabel("{0}:".format(var), self.top) self.grid.addWidget(label, row, 0, Qt.Alignment(Qt.AlignTop)) if var.find(":") >= 0: formatStr = var[1:-1].split(":")[1] if formatStr in ["ml", "rl"]: t = QTextEdit(self.top) t.setTabChangesFocus(True) else: t = QLineEdit(self.top) else: t = QLineEdit(self.top) self.grid.addWidget(t, row, 1) self.variablesEntries[var] = t row += 1 # add a spacer to make the entries aligned at the top spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.grid.addItem(spacer, row, 1) self.variablesEntries[variables[0]].setFocus() self.top.adjustSize() # generate the buttons layout1 = QHBoxLayout() layout1.setContentsMargins(0, 0, 0, 0) layout1.setSpacing(6) layout1.setObjectName("layout1") spacer1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) layout1.addItem(spacer1) self.okButton = QPushButton(self) self.okButton.setObjectName("okButton") self.okButton.setDefault(True) layout1.addWidget(self.okButton) self.cancelButton = QPushButton(self) self.cancelButton.setObjectName("cancelButton") layout1.addWidget(self.cancelButton) spacer2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) layout1.addItem(spacer2) self.TemplateMultipleVariablesDialogLayout.addLayout(layout1) # set the texts of the standard widgets self.setWindowTitle(self.tr("Enter Template Variables")) self.okButton.setText(self.tr("&OK")) self.cancelButton.setText(self.tr("&Cancel")) # polish up the dialog self.resize(QSize(400, 480).expandedTo(self.minimumSizeHint())) self.okButton.clicked.connect(self.accept) self.cancelButton.clicked.connect(self.reject)
class DeckEditorMainWindow(QMainWindow): def __init__(self): super().__init__() self.setup_ui() self.stringfile = None self.reset_in_process = False path = get_default_path() if path is None: self.default_path = "" else: self.default_path = path self.deck_list.currentItemChanged.connect(self.action_listwidget_change_item) self.button_set_deck.pressed.connect(self.action_button_set_deck) self.deck_data = None def reset(self): self.reset_in_process = True self.deck_list.clearSelection() self.deck_list.clear() self.reset_in_process = False def action_button_set_deck(self): print("I was pressed") current = self.deck_list.currentItem() self.statusbar.clearMessage() if current is not None and self.deck_data is not None: try: leader, rank = self.lineedit_leader.text(), self.lineedit_leader_rank.text() deck_data = [] if rank.isnumeric(): rank = int(rank) else: self.statusbar.showMessage("Rank is not numeric") return if leader.isnumeric(): leaderdata = (int(leader) & 0xFFF) | ((rank & 0xF) << 12) else: match = match_partly(leader) if isinstance(match, tuple) and match[0] is None: self.statusbar.showMessage("No matching card found: '{0}'".format(leader)) return elif isinstance(match, tuple): index, card = match leaderdata = (int(index) & 0xFFF) | ((rank & 0xF) << 12) else: if len(match) > 5: self.statusbar.showMessage("Too many matches found ({0} matches)".format(len(match))) else: self.statusbar.showMessage("More than 1 match found: {0}".format( ", ".join("{0} ({1})".format(x[1], x[0]) for x in match))) return deck_data.append(leaderdata) cards = [] for i in range(40): textedit, indexlabel, cardname = self.card_slots[i][0:3] card = textedit.text() if card.isnumeric(): card = int(card) & 0xFFF deck_data.append(card) else: match = match_partly(card) if isinstance(match, tuple) and match[0] is None: self.statusbar.showMessage("No matching card found: '{0}'".format(card)) return elif isinstance(match, tuple): index, card = match deck_data.append(index) else: if len(match) > 5: self.statusbar.showMessage("Too many matches found ({0} matches)".format(len(match))) else: self.statusbar.showMessage("More than 1 match found: {0}".format( ", ".join("{0} ({1})".format(x[1], x[0]) for x in match))) return if current.is_starter: current.setText("[Starter] {0:>7} [rank:{1:>2}] {2}".format(leaderdata&0xFFF, rank, get_name(leaderdata & 0xFFF))) else: current.setText("[CPU] {0:>7} [rank:{1:>2}] {2}".format(leaderdata&0xFFF, rank, get_name(leaderdata & 0xFFF))) self.leader_label.setText(get_name(leaderdata & 0xFFF)) self.lineedit_leader.setText(str(leaderdata & 0xFFF)) print(len(deck_data)) for i in range(40): card = deck_data[1+i] textedit, indexlabel, cardname = self.card_slots[i][0:3] textedit.setText(str(card)) cardname.setText(get_name(card)) print(type(self.deck_data)) struct.pack_into("H"*41, self.deck_data, current.number*41*2, *deck_data) except: traceback.print_exc() def action_listwidget_change_item(self, current, previous): try: if current is not None: print(current, current.number, current.deck_offset) leader = struct.unpack_from("H", self.deck_data, current.number*41*2)[0] rank = leader >> 12 leader_card = leader & 0xFFF self.lineedit_leader.setText(str(leader_card)) self.lineedit_leader_rank.setText(str(rank)) self.leader_label.setText(get_name(leader_card)) for i in range(40): card = struct.unpack_from("H", self.deck_data, current.number*41*2 + 2 + i*2)[0] & 0xFFF textedit, indexlabel, cardname = self.card_slots[i][0:3] textedit.setText(str(card)) cardname.setText(get_name(card)) except: traceback.print_exc() raise def button_load_decks(self): try: print("ok", self.default_path) self.xmlPath = "" filepath, choosentype = QFileDialog.getOpenFileName( self, "Open File", self.default_path, "PS2 iso (*.iso);;All files (*)") print("doooone") if filepath: print("resetting") self.reset() print("done") with open(filepath, "rb") as f: try: f.seek(STARTER_DECK_OFFSET) self.deck_data = bytearray(f.read(17*41*2)) # 17 starter decks, each 41 bytes f.seek(CPU_DECK_OFFSET) self.deck_data += f.read(24*41*2) # 24 CPU decks self.default_path = filepath for i in range(17): leader_byte1, leader_byte2 = struct.unpack_from("BB", self.deck_data, i*41*2) rank = leader_byte2 >> 4 leader = ((leader_byte2 & 0x0F) << 8) + leader_byte1 deck = YugiohDeckEntry(starter=True, number=i, offset=STARTER_DECK_OFFSET+i*41*2) cardname = get_name(leader) deck.setText("[Starter] {0:>7} [rank:{1:>2}] {2}".format(leader, rank, cardname)) self.deck_list.addItem(deck) for i in range(17, 17+24): leader_byte1, leader_byte2 = struct.unpack_from("BB", self.deck_data, i*41*2) rank = leader_byte2 >> 4 leader = ((leader_byte2 & 0x0F) << 8) + leader_byte1 deck = YugiohDeckEntry(starter=False, number=i, offset=CPU_DECK_OFFSET +i*41*2 ) cardname = get_name(leader) deck.setText("[CPU] {0:>7} [rank:{1:>1}] {2}".format(leader, rank,cardname)) self.deck_list.addItem(deck) print("loaded decks") except Exception as error: print("error", error) except Exception as er: print("errrorrr", error) traceback.print_exc() print("loaded") def button_save_decks(self): if self.deck_data is not None: filepath, choosentype = QFileDialog.getSaveFileName( self, "Save File", self.default_path, "PS2 iso (*.iso);;All files (*)") print(filepath, "saved") if filepath: with open(filepath, "r+b") as f: f.seek(STARTER_DECK_OFFSET) f.write(self.deck_data[0:17*41*2]) f.seek(CPU_DECK_OFFSET) f.write(self.deck_data[17*41*2:17*41*2+24*41*2]) self.default_path = filepath set_default_path(filepath) else: pass # no level loaded, do nothing def setup_ui(self): self.setObjectName("MainWindow") self.resize(820, 760) self.setMinimumSize(QSize(720, 560)) self.setWindowTitle("Yugioh Duelist of Roses - Deck Edit") self.centralwidget = QWidget(self) self.centralwidget.setObjectName("centralwidget") self.setCentralWidget(self.centralwidget) self.horizontalLayout = QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.deck_list = QListWidget(self.centralwidget) self.horizontalLayout.addWidget(self.deck_list) self.vertLayoutWidget = QWidget(self.centralwidget) self.verticalLayout = QVBoxLayout(self.vertLayoutWidget) self.button_set_deck = QPushButton(self.centralwidget) self.button_set_deck.setText("Set Deck") self.leader_layoutwidget = QWidget(self.centralwidget) self.leader_layout = QHBoxLayout(self.leader_layoutwidget) self.leader_layoutwidget.setLayout(self.leader_layout) self.lineedit_leader = QLineEdit(self.centralwidget) self.leader_label = QLabel(self.centralwidget) self.leader_layout.addWidget(self.lineedit_leader) self.leader_layout.addWidget(self.leader_label) self.lineedit_leader_rank = QLineEdit(self.centralwidget) for widget in (self.button_set_deck, self.leader_layoutwidget, self.lineedit_leader_rank): self.verticalLayout.addWidget(widget) self.cards_scroll = QScrollArea(self.centralwidget) self.cards_scroll.setWidgetResizable(True) self.card_slots = [] self.cards_verticalWidget = QWidget(self.centralwidget) self.cards_vertical = QVBoxLayout(self.centralwidget) self.cards_verticalWidget.setLayout(self.cards_vertical) self.cards_scroll.setWidget(self.cards_verticalWidget) for i in range(40): layoutwidget = QWidget(self.centralwidget) layout = QHBoxLayout(layoutwidget) layoutwidget.setLayout(layout) index_text = QLabel(self.centralwidget) index_text.setText("{0:>2}".format(i)) textedit = QLineEdit(self.centralwidget) textedit.setMinimumSize(20, 20) textedit.setMaximumSize(100, 5000) card_name_text = QLabel(self.centralwidget) card_name_text.setText("---") card_name_text.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) layout.addWidget(index_text) layout.addWidget(textedit) layout.addWidget(card_name_text) self.card_slots.append((textedit, index_text, card_name_text, layout, layoutwidget)) self.cards_vertical.addWidget(layoutwidget) self.verticalLayout.addWidget(self.cards_scroll) self.horizontalLayout.addWidget(self.vertLayoutWidget) self.menubar = self.menuBar() self.file_menu = self.menubar.addMenu("File") self.file_menu.setObjectName("menuLoad") self.file_load_action = QAction("Load", self) self.file_load_action.triggered.connect(self.button_load_decks) self.file_menu.addAction(self.file_load_action) self.file_save_action = QAction("Save", self) self.file_save_action.triggered.connect(self.button_save_decks) self.file_menu.addAction(self.file_save_action) self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) print("done")
class MyRecurrenceBox(QFrame): # TODO - Build a occurrence selector for Contract model based on spinbox # Used information type is DateTime.TimeDelta valueSet = pyqtSignal(bool) _recurrenceValue = None def __init__(self, *args): super(MyRecurrenceBox, self).__init__(*args) Lumberjack.info('spawning a << MyRecurrenceBox >>') _translate = QCoreApplication.translate self.setFrameShape(QFrame.StyledPanel) self.setFrameShadow(QFrame.Raised) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setObjectName("verticalLayout") self.spinBox = QSpinBox(self) self.spinBox.setObjectName("spinBox") self.spinBox.setValue(1) self.verticalLayout.addWidget(self.spinBox) self.spinBox.valueChanged.connect(self.on_value_spin) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.dailyRadioButton = QRadioButton(self) self.dailyRadioButton.setObjectName("dailyRadioButton") self.horizontalLayout_2.addWidget(self.dailyRadioButton) self.dailyRadioButton.setText(_translate("Form", "Days")) self.dailyRadioButton.setChecked(True) self.selected_radio_button = self.dailyRadioButton self.dailyRadioButton.toggled.connect(self.on_radio_toggle) self.weeklyRadioButton = QRadioButton(self) self.weeklyRadioButton.setObjectName("weeklyRadioButton") self.horizontalLayout_2.addWidget(self.weeklyRadioButton) self.weeklyRadioButton.setText(_translate("Form", "Weeks")) self.weeklyRadioButton.toggled.connect(self.on_radio_toggle) self.monthlyRadioButton = QRadioButton(self) self.monthlyRadioButton.setObjectName("monthlyRadioButton") self.horizontalLayout_2.addWidget(self.monthlyRadioButton) self.monthlyRadioButton.setText(_translate("Form", "Months")) self.monthlyRadioButton.toggled.connect(self.on_radio_toggle) self.yearlyRadioButton = QRadioButton(self) self.yearlyRadioButton.setObjectName("yearlyRadioButton") self.horizontalLayout_2.addWidget(self.yearlyRadioButton) self.verticalLayout.addLayout(self.horizontalLayout_2) self.yearlyRadioButton.setText(_translate("Form", "Years")) self.yearlyRadioButton.toggled.connect(self.on_radio_toggle) self.radio_buttons = [self.dailyRadioButton, self.weeklyRadioButton, self.monthlyRadioButton, self.yearlyRadioButton] def getRecurrenceValue(self): Lumberjack.info('< MyRecurrenceBox > - -> (getRecurrenceValue)') return self._recurrenceValue def setRecurrenceValue(self, rel_delta): Lumberjack.info('< MyRecurrenceBox > - -> (setRecurrenceValue)') self._recurrenceValue = rel_delta Lumberjack.debug('(setRecurrenceValue) - rel_delta = {}'.format(rel_delta)) if rel_delta is None: self._recurrenceValue = None else: for kw in rel_delta: for radio_button in self.radio_buttons: if kw == radio_button.text().lower(): Lumberjack.debug('(setRecurrenceValue) - checking radiobutton = {}'.format(radio_button.text())) radio_button.setChecked(True) self.spinBox.setValue(rel_delta[kw]) if self._recurrenceValue is None: self.valueSet.emit(False) else: self.valueSet.emit(True) recurrenceValue = pyqtProperty(dict, fget=getRecurrenceValue, fset=setRecurrenceValue) def on_radio_toggle(self, *args): Lumberjack.info('< MyRecurrenceBox > - -> (on_radio_toggle)') activate = args[0] Lumberjack.debug('(on_toggle) - args = {}'.format(activate)) if not activate: return for radio_button in self.radio_buttons: if radio_button.isChecked(): self.selected_radio_button = radio_button Lumberjack.debug('(on_toggle) - selected radiobutton.text = {}'.format(radio_button.text())) rel_delta = self._calculate_value() self._recurrenceValue = rel_delta def on_value_spin(self, x): Lumberjack.info('< MyRecurrenceBox > - -> (on_value_spin)') rel_delta = self._calculate_value() self._recurrenceValue = rel_delta def _calculate_value(self): Lumberjack.info('< MyRecurrenceBox > - -> (_calculate_value)') x = self.spinBox.value() kw = self.selected_radio_button.text().lower() timespan = {kw: x} Lumberjack.debug('(_calculate_value) - calculated value = {} {}'.format(timespan, type(timespan))) return timespan
class Ui_Tip(object): def setupUi(self, Tip, name = "", head = "", mood = "", pic1 = "", pic2 = "", pic3 = ""): Tip.setObjectName("Tip") Tip.resize(275, 180) size = QSize(275, 180) Tip.setMinimumSize(size) Tip.setMaximumSize(size) Tip.setWindowTitle("") self.name = name self.head = head self.mood = mood self.pic1 = pic1 self.pic2 = pic2 self.pic3 = pic3 self.mainWidget = QWidget(Tip) self.mainWidget.setObjectName("tip") self.verticalLayout = QVBoxLayout(self.mainWidget) self.verticalLayout.setObjectName("verticalLayout") self.widget = QWidget(self.mainWidget) self.widget.setObjectName("widget") self.widget.setMinimumHeight(80) self.widget.setMaximumHeight(80) self.horizontalLayout_2 = QHBoxLayout(self.widget) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.itemHeadLabel = QLabel(self.widget) self.itemHeadLabel.setMinimumSize(QSize(80, 80)) self.itemHeadLabel.setMaximumSize(QSize(80, 80)) self.itemHeadLabel.setOpenExternalLinks(True) self.itemHeadLabel.setObjectName("itemHeadLabel") self.horizontalLayout_2.addWidget(self.itemHeadLabel) self.widget_3 = QWidget(self.widget) self.verticalLayout_2 = QVBoxLayout(self.widget_3) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.itemNameLabel = QLabel(self.widget_3) # self.itemNameLabel.setOpenExternalLinks(True) self.itemNameLabel.setObjectName("itemNameLabel") self.verticalLayout_2.addWidget(self.itemNameLabel) self.itemMoodLabel = QLabel(self.widget_3) # self.itemMoodLabel.setOpenExternalLinks(True) self.itemMoodLabel.setObjectName("itemMoodLabel") self.verticalLayout_2.addWidget(self.itemMoodLabel) self.horizontalLayout_2.addWidget(self.widget_3) self.verticalLayout.addWidget(self.widget) self.widget_2 = QWidget(self.mainWidget) self.widget_2.setMinimumSize(QSize(0, 80)) self.widget_2.setMaximumSize(QSize(16777215, 80)) self.widget_2.setObjectName("widget_2") self.horizontalLayout = QHBoxLayout(self.widget_2) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.itemPicLabel_1 = QLabel(self.widget_2) self.itemPicLabel_1.setObjectName("itemPicLabel_1") self.horizontalLayout.addWidget(self.itemPicLabel_1) self.itemPicLabel_2 = QLabel(self.widget_2) self.itemPicLabel_2.setObjectName("itemPicLabel_2") self.horizontalLayout.addWidget(self.itemPicLabel_2) self.itemPicLabel_3 = QLabel(self.widget_2) self.itemPicLabel_3.setObjectName("itemPicLabel_3") self.horizontalLayout.addWidget(self.itemPicLabel_3) self.verticalLayout.addWidget(self.widget_2) self.mainWidget.setLayout(self.verticalLayout) self.retranslateUi(self.mainWidget) QMetaObject.connectSlotsByName(Tip) def retranslateUi(self, Tip): _translate = QCoreApplication.translate if self.head: self.itemHeadLabel.setStyleSheet("QLabel#itemHeadLabel {\n image: url(%s);\n}" % self.head) self.itemHeadLabel.setToolTip(_translate("Tip", "进入空间")) if self.name: self.itemNameLabel.setToolTip(_translate("Tip", "%s 点击查看详细资料" % self.name)) self.itemNameLabel.setText(_translate("Tip", "<html><head/><body><p><a href=\"http://www.baidu.com\"><span style=\"color: black;text-decoration: none;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\">%s</span></a></p></body></html>" % self.name)) self.itemMoodLabel.setToolTip(_translate("Tip", "点击查看心情")) self.itemMoodLabel.setText(_translate("Tip", "<html><head/><body><p><a href=\"http://www.baidu.com\"><span style=\"color: black;text-decoration: none;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\">%s</span></a></p></body></html>" % self.mood if self.mood else "这个家伙太懒!什么都没说..."))
class PreviewWidgetStyle(QGroupBox): def __init__(self, parent=None): super().__init__(parent) self.setTitle(self.tr("Preview")) self.setMaximumHeight(220) self.setObjectName("groupBox") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setObjectName("verticalLayout") self.tabWidget = QTabWidget(self) self.tabWidget.setObjectName("tabWidgetPreview") self.tab = QWidget() self.tab.setObjectName("tab") self.horizontalLayout = QHBoxLayout(self.tab) self.horizontalLayout.setObjectName("horizontalLayout") self.groupBox = QGroupBox(self.tab) self.groupBox.setTitle(self.tr("Group Box")) self.groupBox.setObjectName("groupBox") self.verticalLayout_2 = QVBoxLayout(self.groupBox) self.verticalLayout_2.setObjectName("verticalLayout_2") self.radioButton = QRadioButton(self.groupBox) self.radioButton.setText(self.tr("Radio Button")) self.radioButton.setChecked(True) self.radioButton.setObjectName("radioButton") self.verticalLayout_2.addWidget(self.radioButton) self.radioButton_2 = QRadioButton(self.groupBox) self.radioButton_2.setText(self.tr("Radio Button")) self.radioButton_2.setObjectName("radioButton_2") self.verticalLayout_2.addWidget(self.radioButton_2) self.line = QFrame(self.groupBox) self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout_2.addWidget(self.line) self.checkBox = QCheckBox(self.groupBox) self.checkBox.setText(self.tr("Check Box")) self.checkBox.setChecked(True) self.checkBox.setObjectName("checkBox") self.verticalLayout_2.addWidget(self.checkBox) self.horizontalLayout.addWidget(self.groupBox) self.verticalLayout_3 = QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") self.progressBar = QProgressBar(self.tab) self.progressBar.setProperty("value", 75) self.progressBar.setObjectName("progressBar") self.verticalLayout_3.addWidget(self.progressBar) self.horizontalSlider = QSlider(self.tab) self.horizontalSlider.setProperty("value", 45) self.horizontalSlider.setSliderPosition(45) self.horizontalSlider.setOrientation(Qt.Horizontal) self.horizontalSlider.setObjectName("horizontalSlider") self.verticalLayout_3.addWidget(self.horizontalSlider) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.spinBox = QSpinBox(self.tab) self.spinBox.setObjectName("spinBox") self.horizontalLayout_2.addWidget(self.spinBox) self.pushButton = QPushButton(self.tab) self.pushButton.setText(self.tr("Button")) self.pushButton.setObjectName("pushButton") self.horizontalLayout_2.addWidget(self.pushButton) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.comboBox = QComboBox(self.tab) self.comboBox.setObjectName("comboBox") self.comboBox.addItem(self.tr("Combo Box")) self.verticalLayout_3.addWidget(self.comboBox) self.horizontalLayout.addLayout(self.verticalLayout_3) self.verticalScrollBar = QScrollBar(self.tab) self.verticalScrollBar.setPageStep(50) self.verticalScrollBar.setOrientation(Qt.Vertical) self.verticalScrollBar.setObjectName("verticalScrollBar") self.horizontalLayout.addWidget(self.verticalScrollBar) self.tabWidget.addTab(self.tab, self.tr("Tab 1")) self.tab_2 = QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, self.tr("Tab 2")) self.verticalLayout.addWidget(self.tabWidget) self.pushButton.installEventFilter(self) self.pushButton.setFocusPolicy(Qt.NoFocus) self.radioButton.installEventFilter(self) self.radioButton.setFocusPolicy(Qt.NoFocus) self.radioButton_2.installEventFilter(self) self.radioButton_2.setFocusPolicy(Qt.NoFocus) self.checkBox.installEventFilter(self) self.checkBox.setFocusPolicy(Qt.NoFocus) self.comboBox.installEventFilter(self) self.comboBox.setFocusPolicy(Qt.NoFocus) self.spinBox.installEventFilter(self) self.spinBox.setFocusPolicy(Qt.NoFocus) self.horizontalSlider.installEventFilter(self) self.horizontalSlider.setFocusPolicy(Qt.NoFocus) self.verticalScrollBar.installEventFilter(self) self.verticalScrollBar.setFocusPolicy(Qt.NoFocus) self.tab.installEventFilter(self) self.tab.setFocusPolicy(Qt.NoFocus) self.tab_2.installEventFilter(self) self.tab_2.setFocusPolicy(Qt.NoFocus) self.tabWidget.installEventFilter(self) self.tabWidget.setFocusPolicy(Qt.NoFocus) self.tabWidget.currentChanged.connect(self.noClick) def noClick(self, x): self.tabWidget.setCurrentIndex(0) def eventFilter(self, obj, event): if self.pushButton: if event.type() == QEvent.MouseButtonRelease: return True elif event.type() == QEvent.MouseButtonPress: return True elif event.type() == QEvent.MouseButtonDblClick: return True else: return False else: super().eventFilter(obj, event)
class ThemeTabWidget(QTabWidget): def __init__(self, parent=None): super().__init__(parent) self.setStyleSheet("QTabWidget#tabWidget::tab-bar {alignment:center;}") self.setObjectName("tabWidget") self.setCurrentIndex(0) self.colorSchemePath = "/usr/share/color-schemes" self.createTabWidgetStyle() self.createTabWindowStyle() self.createTabColorScheme() self.createTabDesktopTheme() #self.createTabMouseCursor() self.createTabIconSet() def createTabWidgetStyle(self): self.tabWidgetStyle = QWidget() self.tabWidgetStyle.setObjectName("tabWidgetStyle") self.verticalLayout = QVBoxLayout(self.tabWidgetStyle) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.labelWidgetStyle = QLabel(self.tabWidgetStyle) self.labelWidgetStyle.setText(self.tr("Widget Style:")) self.labelWidgetStyle.setObjectName("labelWidgetStyle") self.horizontalLayout.addWidget(self.labelWidgetStyle) self.comboBoxWidgetStyle = QComboBox(self.tabWidgetStyle) self.comboBoxWidgetStyle.setObjectName("comboBoxWidgetStyle") self.comboBoxWidgetStyle.addItem(self.tr("QtCurve")) self.comboBoxWidgetStyle.addItem(self.tr("Breeze")) self.comboBoxWidgetStyle.addItem(self.tr("Oxygen")) self.comboBoxWidgetStyle.addItem(self.tr("Fusion")) self.horizontalLayout.addWidget(self.comboBoxWidgetStyle) self.verticalLayout.addLayout(self.horizontalLayout) self.verticalLayout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.previewWidgetStyle = PreviewWidgetStyle(self.tabWidgetStyle) self.previewWidgetStyle.tabWidget.setStyle(QStyleFactory.create("QtCurve")) self.verticalLayout.addWidget(self.previewWidgetStyle) self.addTab(self.tabWidgetStyle, self.tr("Widget Style")) self.comboBoxWidgetStyle.currentTextChanged.connect(self.previewStyle) def previewStyle(self, text): self.previewWidgetStyle.tabWidget.setStyle(QStyleFactory.create(text)) def createTabWindowStyle(self): self.tabWindowStyle = QWidget() self.tabWindowStyle.setObjectName("tabWindowStyle") self.verticalLayout_6 = QVBoxLayout(self.tabWindowStyle) self.verticalLayout_6.setObjectName("verticalLayout_6") self.listWidgetWindowStyle = QListWidget(self.tabWindowStyle) self.listWidgetWindowStyle.setResizeMode(QListView.Adjust) self.listWidgetWindowStyle.setIconSize(QSize(700, 147)) self.listWidgetWindowStyle.setViewMode(QListView.IconMode) self.listWidgetWindowStyle.setObjectName("listWidgetWindowStyle") item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/breeze_deco.png")) item.setIcon(icon) item.setText("Breeze") item.setStyleText = "org.kde.breeze" item.themeText = "" item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/midna-flat_deco.png")) item.setIcon(icon) item.setText("Midna Flat") item.setStyleText = "org.kde.kwin.aurorae" item.themeText = "__aurorae__svg__MidnaFlatNarrow" item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/midna-dark_deco.png")) item.setIcon(icon) item.setText("Midna Dark") item.setStyleText = "org.kde.kwin.aurorae" item.themeText = "__aurorae__svg__MidnaDark" item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/midna-grey_deco.png")) item.setIcon(icon) item.setText("Midna Gray") item.setStyleText = "org.kde.kwin.aurorae" item.themeText = "__aurorae__svg__MidnaFlatWideGray" item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/midna-wide_deco.png")) item.setIcon(icon) item.setText("Midna Wide") item.setStyleText = "org.kde.kwin.aurorae" item.themeText = "__aurorae__svg__MidnaFlatWideBlue" item = QListWidgetItem(self.listWidgetWindowStyle) icon1 = QIcon() icon1.addPixmap(QPixmap(":/data/images/oxygen_deco.png")) item.setIcon(icon1) item.setText("Oxygen") item.setStyleText = "org.kde.oxygen" item.themeText = "" self.verticalLayout_6.addWidget(self.listWidgetWindowStyle) self.addTab(self.tabWindowStyle, self.tr("Window Style")) def createTabColorScheme(self): self.tabColorScheme = QWidget() self.tabColorScheme.setObjectName("tabColorScheme") self.verticalLayout_2 = QVBoxLayout(self.tabColorScheme) self.verticalLayout_2.setObjectName("verticalLayout_2") self.listWidgetColorScheme = QListWidget(self.tabColorScheme) self.listWidgetColorScheme.setObjectName("listWidgetColorScheme") self.verticalLayout_2.addWidget(self.listWidgetColorScheme) color_list = os.listdir(self.colorSchemePath) color_list.sort(key = len) for color in color_list: item = QListWidgetItem(self.listWidgetColorScheme) item.setText(color.split(".")[0]) item.colorSchemeName = color self.listWidgetColorScheme.itemClicked.connect(self.previewColorScheme) self.listWidgetColorScheme.setCurrentRow(0) self.previewWidgetColor = PreviewWidgetColor(self.tabColorScheme) self.verticalLayout_2.addWidget(self.previewWidgetColor) self.addTab(self.tabColorScheme, self.tr("Color Scheme")) def previewColorScheme(self, item): css = iniToCss(os.path.join(self.colorSchemePath, item.colorSchemeName)) self.previewWidgetColor.previewGroupBox.setStyleSheet(css[0]) self.previewWidgetColor.previewTextBrowser.setHtml("""<style>#unclicked {color : rgb(%s);} #clicked {color : rgb(%s);}</style>"""%(css[1][0],css[1][1]) + self.tr("""<p>Normal text <a id='unclicked' href='#'>link</a> <a id='clicked' href='#'>visited</a></p>""")) def createTabDesktopTheme(self): self.tabDesktopTheme = QWidget() self.tabDesktopTheme.setObjectName("tabDesktopTheme") self.verticalLayout_4 = QVBoxLayout(self.tabDesktopTheme) self.verticalLayout_4.setObjectName("verticalLayout_4") self.listWidgetDesktopTheme = QListWidget(self.tabDesktopTheme) self.listWidgetDesktopTheme.setObjectName("listWidgetDesktopTheme") self.listWidgetDesktopTheme.setViewMode(QListView.IconMode) self.listWidgetDesktopTheme.setIconSize(QSize(240, 145)) self.listWidgetDesktopTheme.setResizeMode(QListView.Adjust) item = QListWidgetItem(self.listWidgetDesktopTheme) icon = QIcon(QPixmap(":/data/images/air_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "air" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/breeze_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "default" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/breeze-dark_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "breeze-dark" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/midna_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "midna" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/midna-dark_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "midna_dark" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/oxygen_panel.png").scaled(QSize(240, 145), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(240, 145)) item.setIcon(icon) item.panelText = "oxygen" self.verticalLayout_4.addWidget(self.listWidgetDesktopTheme) self.addTab(self.tabDesktopTheme, self.tr("Desktop Theme")) def createTabIconSet(self): self.tabIconSet = QWidget() self.tabIconSet.setObjectName("tabIconSet") self.verticalLayout_3 = QVBoxLayout(self.tabIconSet) self.verticalLayout_3.setObjectName("verticalLayout_3") self.listWidgetIconSet = QListWidget(self.tabIconSet) self.listWidgetIconSet.setResizeMode(QListView.Adjust) self.listWidgetIconSet.setObjectName("listWidgetIconSet") self.listWidgetIconSet.setViewMode(QListView.IconMode) self.listWidgetIconSet.setIconSize(QSize(370, 64)) item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/midna-set.png")) item.setText("Midna") item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/midna-dark-set.png")) item.setText("MidnaDark") item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/breeze-set.png")) item.setText("Breeze") item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/oxygen-set.png")) item.setText("Oxygen") self.verticalLayout_3.addWidget(self.listWidgetIconSet) self.addTab(self.tabIconSet, self.tr("Icon Set"))
class TRPreviewer(E5MainWindow): """ Class implementing the UI Previewer main window. """ def __init__(self, filenames=[], parent=None, name=None): """ Constructor @param filenames filenames of form and/or translation files to load @param parent parent widget of this window (QWidget) @param name name of this window (string) """ self.mainWidget = None self.currentFile = QDir.currentPath() super(TRPreviewer, self).__init__(parent) if not name: self.setObjectName("TRPreviewer") else: self.setObjectName(name) self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.tr("Translations Previewer")) self.cw = QWidget(self) self.cw.setObjectName("qt_central_widget") self.TRPreviewerLayout = QVBoxLayout(self.cw) self.TRPreviewerLayout.setContentsMargins(6, 6, 6, 6) self.TRPreviewerLayout.setSpacing(6) self.TRPreviewerLayout.setObjectName("TRPreviewerLayout") self.languageLayout = QHBoxLayout() self.languageLayout.setContentsMargins(0, 0, 0, 0) self.languageLayout.setSpacing(6) self.languageLayout.setObjectName("languageLayout") self.languageLabel = QLabel( self.tr("Select language file"), self.cw) self.languageLabel.setObjectName("languageLabel") self.languageLayout.addWidget(self.languageLabel) self.languageCombo = QComboBox(self.cw) self.languageCombo.setObjectName("languageCombo") self.languageCombo.setEditable(False) self.languageCombo.setToolTip(self.tr("Select language file")) self.languageCombo.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred) self.languageLayout.addWidget(self.languageCombo) languageSpacer = QSpacerItem( 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.languageLayout.addItem(languageSpacer) self.TRPreviewerLayout.addLayout(self.languageLayout) self.preview = WidgetArea(self.cw) self.preview.setObjectName("preview") self.TRPreviewerLayout.addWidget(self.preview) self.preview.lastWidgetClosed.connect(self.__updateActions) self.setCentralWidget(self.cw) self.languageCombo.activated[str].connect(self.setTranslation) self.translations = TranslationsDict(self.languageCombo, self) self.translations.translationChanged.connect( self.preview.rebuildWidgets) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # fire up the single application server from .TRSingleApplication import TRSingleApplicationServer self.SAServer = TRSingleApplicationServer(self) self.SAServer.loadForm.connect(self.preview.loadWidget) self.SAServer.loadTranslation.connect(self.translations.add) # defere loading of a UI file until we are shown self.filesToLoad = filenames[:] def show(self): """ Public slot to show this dialog. This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window. """ super(TRPreviewer, self).show() if self.filesToLoad: filenames, self.filesToLoad = (self.filesToLoad[:], []) first = True for fn in filenames: fi = QFileInfo(fn) if fi.suffix().lower() == 'ui': self.preview.loadWidget(fn) elif fi.suffix().lower() == 'qm': self.translations.add(fn, first) first = False self.__updateActions() def closeEvent(self, event): """ Protected event handler for the close event. @param event close event (QCloseEvent) """ if self.SAServer is not None: self.SAServer.shutdown() self.SAServer = None event.accept() def __initActions(self): """ Private method to define the user interface actions. """ self.openUIAct = QAction( UI.PixmapCache.getIcon("openUI.png"), self.tr('&Open UI Files...'), self) self.openUIAct.setStatusTip(self.tr('Open UI files for display')) self.openUIAct.setWhatsThis(self.tr( """<b>Open UI Files</b>""" """<p>This opens some UI files for display.</p>""" )) self.openUIAct.triggered.connect(self.__openWidget) self.openQMAct = QAction( UI.PixmapCache.getIcon("openQM.png"), self.tr('Open &Translation Files...'), self) self.openQMAct.setStatusTip(self.tr( 'Open Translation files for display')) self.openQMAct.setWhatsThis(self.tr( """<b>Open Translation Files</b>""" """<p>This opens some translation files for display.</p>""" )) self.openQMAct.triggered.connect(self.__openTranslation) self.reloadAct = QAction( UI.PixmapCache.getIcon("reload.png"), self.tr('&Reload Translations'), self) self.reloadAct.setStatusTip(self.tr( 'Reload the loaded translations')) self.reloadAct.setWhatsThis(self.tr( """<b>Reload Translations</b>""" """<p>This reloads the translations for the loaded""" """ languages.</p>""" )) self.reloadAct.triggered.connect(self.translations.reload) self.exitAct = QAction( UI.PixmapCache.getIcon("exit.png"), self.tr('&Quit'), self) self.exitAct.setShortcut(QKeySequence( self.tr("Ctrl+Q", "File|Quit"))) self.exitAct.setStatusTip(self.tr('Quit the application')) self.exitAct.setWhatsThis(self.tr( """<b>Quit</b>""" """<p>Quit the application.</p>""" )) self.exitAct.triggered.connect(qApp.closeAllWindows) self.whatsThisAct = QAction( UI.PixmapCache.getIcon("whatsThis.png"), self.tr('&What\'s This?'), self) self.whatsThisAct.setShortcut(QKeySequence(self.tr("Shift+F1"))) self.whatsThisAct.setStatusTip(self.tr('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.tr( """<b>Display context sensitive help</b>""" """<p>In What's This? mode, the mouse cursor shows an arrow""" """ with a question mark, and you can click on the interface""" """ elements to get a short description of what they do and""" """ how to use them. In dialogs, this feature can be accessed""" """ using the context help button in the titlebar.</p>""" )) self.whatsThisAct.triggered.connect(self.__whatsThis) self.aboutAct = QAction(self.tr('&About'), self) self.aboutAct.setStatusTip(self.tr( 'Display information about this software')) self.aboutAct.setWhatsThis(self.tr( """<b>About</b>""" """<p>Display some information about this software.</p>""" )) self.aboutAct.triggered.connect(self.__about) self.aboutQtAct = QAction(self.tr('About &Qt'), self) self.aboutQtAct.setStatusTip( self.tr('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.tr( """<b>About Qt</b>""" """<p>Display some information about the Qt toolkit.</p>""" )) self.aboutQtAct.triggered.connect(self.__aboutQt) self.tileAct = QAction(self.tr('&Tile'), self) self.tileAct.setStatusTip(self.tr('Tile the windows')) self.tileAct.setWhatsThis(self.tr( """<b>Tile the windows</b>""" """<p>Rearrange and resize the windows so that they are""" """ tiled.</p>""" )) self.tileAct.triggered.connect(self.preview.tileSubWindows) self.cascadeAct = QAction(self.tr('&Cascade'), self) self.cascadeAct.setStatusTip(self.tr('Cascade the windows')) self.cascadeAct.setWhatsThis(self.tr( """<b>Cascade the windows</b>""" """<p>Rearrange and resize the windows so that they are""" """ cascaded.</p>""" )) self.cascadeAct.triggered.connect(self.preview.cascadeSubWindows) self.closeAct = QAction( UI.PixmapCache.getIcon("close.png"), self.tr('&Close'), self) self.closeAct.setShortcut(QKeySequence(self.tr( "Ctrl+W", "File|Close"))) self.closeAct.setStatusTip(self.tr('Close the current window')) self.closeAct.setWhatsThis(self.tr( """<b>Close Window</b>""" """<p>Close the current window.</p>""" )) self.closeAct.triggered.connect(self.preview.closeWidget) self.closeAllAct = QAction(self.tr('Clos&e All'), self) self.closeAllAct.setStatusTip(self.tr('Close all windows')) self.closeAllAct.setWhatsThis(self.tr( """<b>Close All Windows</b>""" """<p>Close all windows.</p>""" )) self.closeAllAct.triggered.connect(self.preview.closeAllWidgets) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.tr('&File')) menu.setTearOffEnabled(True) menu.addAction(self.openUIAct) menu.addAction(self.openQMAct) menu.addAction(self.reloadAct) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.exitAct) self.windowMenu = mb.addMenu(self.tr('&Window')) self.windowMenu.setTearOffEnabled(True) self.windowMenu.aboutToShow.connect(self.__showWindowMenu) self.windowMenu.triggered.connect(self.preview.toggleSelectedWidget) mb.addSeparator() menu = mb.addMenu(self.tr('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.tr("File")) filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.openUIAct) filetb.addAction(self.openQMAct) filetb.addAction(self.reloadAct) filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addSeparator() filetb.addAction(self.exitAct) helptb = self.addToolBar(self.tr("Help")) helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __updateActions(self): """ Private slot to update the actions state. """ if self.preview.hasWidgets(): self.closeAct.setEnabled(True) self.closeAllAct.setEnabled(True) self.tileAct.setEnabled(True) self.cascadeAct.setEnabled(True) else: self.closeAct.setEnabled(False) self.closeAllAct.setEnabled(False) self.tileAct.setEnabled(False) self.cascadeAct.setEnabled(False) if self.translations.hasTranslations(): self.reloadAct.setEnabled(True) else: self.reloadAct.setEnabled(False) def __about(self): """ Private slot to show the about information. """ E5MessageBox.about( self, self.tr("TR Previewer"), self.tr( """<h3> About TR Previewer </h3>""" """<p>The TR Previewer loads and displays Qt User-Interface""" """ files and translation files and shows dialogs for a""" """ selected language.</p>""" ) ) def __aboutQt(self): """ Private slot to show info about Qt. """ E5MessageBox.aboutQt(self, self.tr("TR Previewer")) def __openWidget(self): """ Private slot to handle the Open Dialog action. """ fileNameList = E5FileDialog.getOpenFileNames( None, self.tr("Select UI files"), "", self.tr("Qt User-Interface Files (*.ui)")) for fileName in fileNameList: self.preview.loadWidget(fileName) self.__updateActions() def __openTranslation(self): """ Private slot to handle the Open Translation action. """ fileNameList = E5FileDialog.getOpenFileNames( None, self.tr("Select translation files"), "", self.tr("Qt Translation Files (*.qm)")) first = True for fileName in fileNameList: self.translations.add(fileName, first) first = False self.__updateActions() def setTranslation(self, name): """ Public slot to activate a translation. @param name name (language) of the translation (string) """ self.translations.set(name) def __showWindowMenu(self): """ Private slot to handle the aboutToShow signal of the window menu. """ self.windowMenu.clear() self.windowMenu.addAction(self.tileAct) self.windowMenu.addAction(self.cascadeAct) self.windowMenu.addSeparator() self.preview.showWindowMenu(self.windowMenu) def reloadTranslations(self): """ Public slot to reload all translations. """ self.translations.reload()
class ThemeTabWidget(QTabWidget): def __init__(self, parent=None): super().__init__(parent) self.setStyleSheet("QTabWidget#tabWidget::tab-bar {alignment:center;}") self.setObjectName("tabWidget") self.setCurrentIndex(0) self.colorSchemePath = "/usr/share/color-schemes" self.createTabWidgetStyle() self.createTabWindowStyle() self.createTabColorScheme() self.createTabDesktopTheme() #self.createTabMouseCursor() self.createTabIconSet() def createTabWidgetStyle(self): self.tabWidgetStyle = QWidget() self.tabWidgetStyle.setObjectName("tabWidgetStyle") self.verticalLayout = QVBoxLayout(self.tabWidgetStyle) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.labelWidgetStyle = QLabel(self.tabWidgetStyle) self.labelWidgetStyle.setText(self.tr("Widget Style:")) self.labelWidgetStyle.setObjectName("labelWidgetStyle") self.horizontalLayout.addWidget(self.labelWidgetStyle) self.comboBoxWidgetStyle = QComboBox(self.tabWidgetStyle) self.comboBoxWidgetStyle.setObjectName("comboBoxWidgetStyle") self.comboBoxWidgetStyle.addItem(self.tr("Breeze")) self.comboBoxWidgetStyle.addItem(self.tr("Oxygen")) self.comboBoxWidgetStyle.addItem(self.tr("Fusion")) self.horizontalLayout.addWidget(self.comboBoxWidgetStyle) self.verticalLayout.addLayout(self.horizontalLayout) self.verticalLayout.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.previewWidgetStyle = PreviewWidgetStyle(self.tabWidgetStyle) self.previewWidgetStyle.tabWidget.setStyle(QStyleFactory.create("Breeze")) self.verticalLayout.addWidget(self.previewWidgetStyle) self.addTab(self.tabWidgetStyle, self.tr("Widget Style")) self.comboBoxWidgetStyle.currentTextChanged.connect(self.previewStyle) def previewStyle(self, text): self.previewWidgetStyle.tabWidget.setStyle(QStyleFactory.create(text)) def createTabWindowStyle(self): self.tabWindowStyle = QWidget() self.tabWindowStyle.setObjectName("tabWindowStyle") self.verticalLayout_6 = QVBoxLayout(self.tabWindowStyle) self.verticalLayout_6.setObjectName("verticalLayout_6") self.listWidgetWindowStyle = QListWidget(self.tabWindowStyle) self.listWidgetWindowStyle.setResizeMode(QListView.Adjust) self.listWidgetWindowStyle.setIconSize(QSize(340, 105)) self.listWidgetWindowStyle.setViewMode(QListView.IconMode) self.listWidgetWindowStyle.setObjectName("listWidgetWindowStyle") item = QListWidgetItem(self.listWidgetWindowStyle) icon = QIcon() icon.addPixmap(QPixmap(":/data/images/breeze-window.png")) item.setIcon(icon) item.setText("Breeze") item.setStyleText = "org.kde.breeze" item = QListWidgetItem(self.listWidgetWindowStyle) icon1 = QIcon() icon1.addPixmap(QPixmap(":/data/images/oxygen-window.png")) item.setIcon(icon1) item.setText("Oxygen") item.setStyleText = "org.kde.oxygen" self.verticalLayout_6.addWidget(self.listWidgetWindowStyle) self.addTab(self.tabWindowStyle, self.tr("Window Style")) def createTabColorScheme(self): self.tabColorScheme = QWidget() self.tabColorScheme.setObjectName("tabColorScheme") self.verticalLayout_2 = QVBoxLayout(self.tabColorScheme) self.verticalLayout_2.setObjectName("verticalLayout_2") self.listWidgetColorScheme = QListWidget(self.tabColorScheme) self.listWidgetColorScheme.setObjectName("listWidgetColorScheme") self.verticalLayout_2.addWidget(self.listWidgetColorScheme) self.previewWidgetColor = PreviewWidgetColor(self.tabColorScheme) self.verticalLayout_2.addWidget(self.previewWidgetColor) self.addTab(self.tabColorScheme, self.tr("Color Scheme")) color_list = os.listdir(self.colorSchemePath) color_list.sort() for color in color_list: item = QListWidgetItem(self.listWidgetColorScheme) item.setText(color.split(".")[0]) item.colorSchemeName = color self.listWidgetColorScheme.itemClicked.connect(self.previewColorScheme) def previewColorScheme(self, item): css = iniToCss(os.path.join(self.colorSchemePath,item.colorSchemeName)) self.previewWidgetColor.previewGroupBox.setStyleSheet(css) def createTabDesktopTheme(self): self.tabDesktopTheme = QWidget() self.tabDesktopTheme.setObjectName("tabDesktopTheme") self.gridLayout = QGridLayout(self.tabDesktopTheme) self.gridLayout.setObjectName("gridLayout") self.listWidgetDesktopTheme = QListWidget(self.tabDesktopTheme) self.listWidgetDesktopTheme.setObjectName("listWidgetDesktopTheme") self.listWidgetDesktopTheme.setViewMode(QListView.IconMode) self.listWidgetDesktopTheme.setIconSize(QSize(660, 70)) self.gridLayout.addWidget(self.listWidgetDesktopTheme, 0, 0, 1, 1) item = QListWidgetItem(self.listWidgetDesktopTheme) icon = QIcon(QPixmap(":/data/images/air-panel.png").scaled(QSize(660, 70), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(660, 70)) item.setIcon(icon) item.panelText = "air" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/breeze-panel.png").scaled(QSize(660, 70), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(660, 70)) item.setIcon(icon) item.panelText = "default" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/breeze-dark-panel.png").scaled(QSize(660, 70), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(660, 70)) item.setIcon(icon) item.panelText = "breeze-dark" item = QListWidgetItem(self.listWidgetDesktopTheme) item.setTextAlignment(Qt.AlignHCenter) icon = QIcon(QPixmap(":/data/images/oxygen-panel.png").scaled(QSize(660, 70), Qt.IgnoreAspectRatio, Qt.FastTransformation)) item.setSizeHint(QSize(660, 70)) item.setIcon(icon) item.panelText = "oxygen" self.addTab(self.tabDesktopTheme, self.tr("Desktop Theme")) """def createTabMouseCursor(self): self.tabMouseCursor = QWidget() self.tabMouseCursor.setObjectName("tabMouseCursor") self.verticalLayout_4 = QVBoxLayout(self.tabMouseCursor) self.verticalLayout_4.setObjectName("verticalLayout_4") self.listWidgetMouseCursor = QListWidget(self.tabMouseCursor) self.listWidgetMouseCursor.setObjectName("listWidgetMouseCursor") self.verticalLayout_4.addWidget(self.listWidgetMouseCursor) self.addTab(self.tabMouseCursor, self.tr("Mouse Cursor"))""" def createTabIconSet(self): self.tabIconSet = QWidget() self.tabIconSet.setObjectName("tabIconSet") self.verticalLayout_3 = QVBoxLayout(self.tabIconSet) self.verticalLayout_3.setObjectName("verticalLayout_3") self.listWidgetIconSet = QListWidget(self.tabIconSet) self.listWidgetIconSet.setResizeMode(QListView.Adjust) self.listWidgetIconSet.setObjectName("listWidgetIconSet") self.listWidgetIconSet.setViewMode(QListView.IconMode) self.listWidgetIconSet.setIconSize(QSize(370, 64)) item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/oxygen-set.png")) item.setText("Oxygen") item = QListWidgetItem(self.listWidgetIconSet) item.setIcon(QIcon(":/data/images/breeze-set.png")) item.setText("Breeze") self.verticalLayout_3.addWidget(self.listWidgetIconSet) self.addTab(self.tabIconSet, self.tr("Icon Set"))
class EditorMainWindow(QMainWindow): def __init__(self): super().__init__() self.setupUi(self) self.retranslateUi(self) self.level = None path = get_default_path() if path is None: self.default_path = "" else: self.default_path = path self.dragging = False self.last_x = None self.last_y = None self.dragged_time = None self.deleting_item = False # Hack for preventing focusing on next item after deleting the previous one self.moving = False self.resetting = False self.entity_list_widget.currentItemChanged.connect(self.action_listwidget_change_selection) self.button_zoom_in.pressed.connect(self.zoom_in) self.button_zoom_out.pressed.connect(self.zoom_out) self.button_remove_entity.pressed.connect(self.remove_position) self.button_move_entity.pressed.connect(self.move_entity) self.button_clone_entity.pressed.connect(self.action_clone_entity) self.button_show_passengers.pressed.connect(self.action_passenger_window) self.button_edit_xml.pressed.connect(self.action_open_xml_editor) self.button_edit_base_xml.pressed.connect(self.action_open_basexml_editor) self.lineedit_angle.editingFinished.connect(self.action_lineedit_changeangle) self.bw_map_screen.mouse_clicked.connect(self.get_position) self.bw_map_screen.entity_clicked.connect(self.entity_position) self.bw_map_screen.mouse_dragged.connect(self.mouse_move) self.bw_map_screen.mouse_released.connect(self.mouse_release) self.bw_map_screen.mouse_wheel.connect(self.mouse_wheel_scroll_zoom) status = self.statusbar self.bw_map_screen.setMouseTracking(True) self.passenger_window = BWPassengerWindow() self.passenger_window.passengerlist.currentItemChanged.connect(self.passengerwindow_action_choose_entity) self.xmlobject_textbox = BWEntityXMLEditor() self.xmlobject_textbox.button_xml_savetext.pressed.connect(self.xmleditor_action_save_object_xml) self.xmlobject_textbox.triggered.connect(self.action_open_xml_editor_unlimited) self.basexmlobject_textbox = BWEntityXMLEditor(windowtype="XML Base Object") self.basexmlobject_textbox.button_xml_savetext.pressed.connect(self.xmleditor_action_save_base_object_xml) self.basexmlobject_textbox.triggered.connect(self.action_open_xml_editor_unlimited) self.types_visible = {} self.terrain_image = None status.showMessage("Ready") self.xml_windows = {} print("We are now ready!") def reset(self): self.resetting = True self.statusbar.clearMessage() self.dragged_time = None self.moving = False self.dragging = False self.last_x = None self.last_y = None self.dragged_time = None self.moving = False self.entity_list_widget.clearSelection() self.entity_list_widget.clear() self.bw_map_screen.reset() self.clear_visibility_toggles() for window in (self.passenger_window, self.xmlobject_textbox, self.basexmlobject_textbox): window.close() window.reset() for id in self.xml_windows: self.destroy_xml_editor(id) self.resetting = False print("reset done") def destroy_xml_editor(self, id): pass @catch_exception def open_xml_editor(self, objectid, offsetx=0, offsety=0): selected = objectid if self.level is not None and selected in self.level.obj_map: delete = [] for objid, window in self.xml_windows.items(): if not window.isVisible() and objid != selected: window.destroy() delete.append(objid) for objid in delete: del self.xml_windows[objid] if selected == self.basexmlobject_textbox.entity or selected == self.xmlobject_textbox.entity: pass # No need to make a new window elif selected in self.xml_windows and self.xml_windows[selected].isVisible(): self.xml_windows[selected].activateWindow() self.xml_windows[selected].update() else: xml_window = BWEntityXMLEditor() def xmleditor_save_object_unlimited(): self.statusbar.showMessage("Saving object changes...") try: xmlnode = xml_window.get_content() #assert self.bw_map_screen.current_entity == self.basexmlobject_textbox.entity assert xml_window.entity == xmlnode.get("id") # Disallow changing the id of the base object self.level.remove_object(xmlnode.get("id")) self.level.add_object(xmlnode) self.statusbar.showMessage("Saved base object {0} as {1}".format( xml_window.entity, self.level.obj_map[xmlnode.get("id")].name)) except: self.statusbar.showMessage("Saving object failed") traceback.print_exc() xml_window.button_xml_savetext.pressed.connect(xmleditor_save_object_unlimited) xml_window.triggered.connect(self.action_open_xml_editor_unlimited) obj = self.level.obj_map[selected] xml_window.set_title(obj.name) xml_window.set_content(obj._xml_node) #xml_window.move(QPoint(xml_editor_owner.pos().x()+20, xml_editor_owner.pos().y()+20)) xml_window.move(QPoint(offsetx, offsety)) xml_window.show() xml_window.update() self.xml_windows[selected] = xml_window @catch_exception def action_open_xml_editor_unlimited(self, xml_editor_owner): selected = xml_editor_owner.textbox_xml.textCursor().selectedText() self.open_xml_editor(selected, offsetx=xml_editor_owner.pos().x()+20, offsety=xml_editor_owner.pos().y()+20) @catch_exception def action_open_basexml_editor(self): """ if not self.basexmlobject_textbox.isVisible(): self.basexmlobject_textbox.destroy() self.basexmlobject_textbox = BWEntityXMLEditor(windowtype="XML Base Object") self.basexmlobject_textbox.button_xml_savetext.pressed.connect(self.xmleditor_action_save_base_object_xml) self.basexmlobject_textbox.triggered.connect(self.action_open_xml_editor_unlimited) self.basexmlobject_textbox.show() self.basexmlobject_textbox.activateWindow()""" if self.level is not None and self.bw_map_screen.current_entity is not None: obj = self.level.obj_map[self.bw_map_screen.current_entity] if not obj.has_attr("mBase"): pass else: baseobj = self.level.obj_map[obj.get_attr_value("mBase")] #self.basexmlobject_textbox.set_title(baseobj.id) self.open_xml_editor(baseobj.id) def xmleditor_action_save_base_object_xml(self): self.statusbar.showMessage("Saving base object changes...") try: xmlnode = self.basexmlobject_textbox.get_content() #assert self.bw_map_screen.current_entity == self.basexmlobject_textbox.entity assert self.basexmlobject_textbox.entity == xmlnode.get("id") # Disallow changing the id of the base object self.level.remove_object(xmlnode.get("id")) self.level.add_object(xmlnode) self.statusbar.showMessage("Saved base object {0} as {1}".format( self.basexmlobject_textbox.entity, self.level.obj_map[xmlnode.get("id")].name)) except: self.statusbar.showMessage("Saving base object failed") traceback.print_exc() def action_open_xml_editor(self): """ if not self.xmlobject_textbox.isVisible(): self.xmlobject_textbox.destroy() self.xmlobject_textbox = BWEntityXMLEditor() self.xmlobject_textbox.button_xml_savetext.pressed.connect(self.xmleditor_action_save_object_xml) self.xmlobject_textbox.triggered.connect(self.action_open_xml_editor_unlimited) self.xmlobject_textbox.show() self.xmlobject_textbox.activateWindow()""" if self.level is not None and self.bw_map_screen.current_entity is not None: entityobj = self.level.obj_map[self.bw_map_screen.current_entity] self.open_xml_editor(objectid=entityobj.id) update_mapscreen(self.bw_map_screen, self.level.obj_map[entityobj.id]) self.bw_map_screen.update() """self.xmlobject_textbox.set_title(entityobj.id) self.xmlobject_textbox.set_content(entityobj._xml_node) self.xmlobject_textbox.update()""" def xmleditor_action_save_object_xml(self): self.statusbar.showMessage("Saving object changes...") try: xmlnode = self.xmlobject_textbox.get_content() #assert self.bw_map_screen.current_entity == self.xmlobject_textbox.entity assert self.xmlobject_textbox.entity == xmlnode.get("id") or xmlnode.get("id") not in self.level.obj_map if self.passenger_window.isVisible(): self.passenger_window.close() if self.xmlobject_textbox.entity != xmlnode.get("id"): #obj = self.level.obj_map[xmlnode.get("id")] self.level.remove_object(self.xmlobject_textbox.entity) print("adding", xmlnode.get("id"), xmlnode.get("id") in self.level.obj_map ) self.level.add_object(xmlnode) pos = self.get_entity_item_pos(self.xmlobject_textbox.entity) item = self.entity_list_widget.takeItem(pos) self.entity_list_widget.removeItemWidget(item) self.add_item_sorted(xmlnode.get("id")) self.bw_map_screen.rename_entity(self.xmlobject_textbox.entity, xmlnode.get("id")) assert xmlnode.get("id") in self.level.obj_map self.xmlobject_textbox.entity = xmlnode.get("id") self.xmlobject_textbox.set_title(xmlnode.get("id")) else: self.level.remove_object(xmlnode.get("id")) self.level.add_object(xmlnode) update_mapscreen(self.bw_map_screen, self.level.obj_map[xmlnode.get("id")]) self.statusbar.showMessage("Saved object {0} as {1}".format( self.xmlobject_textbox.entity, self.level.obj_map[xmlnode.get("id")].name)) self.bw_map_screen.update() except: self.statusbar.showMessage("Saving object failed") traceback.print_exc() def action_clone_entity(self): entities = [] if self.bw_map_screen.current_entity is not None: entities.append(self.bw_map_screen.current_entity) elif len(self.bw_map_screen.selected_entities) > 0: entities.extend(self.bw_map_screen.selected_entities.keys()) if len(entities) > 0: dont_clone = {} for entity in entities: obj = self.level.obj_map[entity] if obj.has_attr("mPassenger"): passengers = obj.get_attr_elements("mPassenger") for passenger in passengers: if passenger != "0": dont_clone[passenger] = True select = [] for entity in entities: if entity in dont_clone: continue obj = self.level.obj_map[entity] xml_node = deepcopy(obj._xml_node) try: cloned_id = self.level.generate_unique_id(entity) xml_node.set("id", cloned_id) self.level.add_object(xml_node) bw_x, bw_y, angle = object_get_position(self.level, cloned_id) x, y = bw_coords_to_image_coords(bw_x, bw_y) self.add_item_sorted(cloned_id) self.bw_map_screen.add_entity(x, y, cloned_id, obj.type) clonedobj = self.level.obj_map[cloned_id] select.append(cloned_id) update_mapscreen(self.bw_map_screen, clonedobj) if clonedobj.has_attr("mPassenger"): orig_x = bw_x orig_y = bw_y passengers = clonedobj.get_attr_elements("mPassenger") passengers_added = [] for i, passenger in enumerate(passengers): if passenger != "0": obj = self.level.obj_map[passenger] xml_node = deepcopy(obj._xml_node) clonedpassenger_id = self.level.generate_unique_id(passenger) xml_node.set("id", clonedpassenger_id) #print("orig passenger: {0}, new passenger: {1}, alreadyexists: {2}".format( # passenger, clonedpassenger_id, clonedpassenger_id in self.level.obj_map #)) #print(type(passenger), type(clonedpassenger_id)) self.level.add_object(xml_node) #x, y = object_get_position(self.level, newid) x = orig_x + (i+1)*8 y = orig_y + (i+1)*8 #print(orig_x, orig_y, x, y) object_set_position(self.level, clonedpassenger_id, x, y) x, y = bw_coords_to_image_coords(x, y) self.add_item_sorted(clonedpassenger_id) self.bw_map_screen.add_entity(x, y, clonedpassenger_id, obj.type) update_mapscreen(self.bw_map_screen, self.level.obj_map[clonedpassenger_id]) passengers_added.append(passenger) clonedobj.set_attr_value("mPassenger", clonedpassenger_id, i) select.append(clonedpassenger_id) #print("passengers added:", passengers_added) self.bw_map_screen.selected_entities = {} if len(select) == 1: ent = select[0] self.set_entity_text(ent) self.bw_map_screen.choose_entity(ent) else: for ent in select: self.bw_map_screen.selected_entities[ent] = True self.set_entity_text_multiple(self.bw_map_screen.selected_entities) self.bw_map_screen.update() except: traceback.print_exc() def add_item_sorted(self, entity): max_count = self.entity_list_widget.count() entityobj = self.level.obj_map[entity] index = 0 entity_item = BWEntityEntry(entity, "{0}[{1}]".format(entity, entityobj.type)) # Similar to loading a level, we add the entity in a sorted way by # creating this string and comparing it for every item in the list. entity_string = get_type(entityobj.type)+entityobj.type+entityobj.id inserted = False for i in range(max_count): curritem = self.entity_list_widget.item(i) currobj = self.level.obj_map[curritem.xml_ref] currstring = get_type(currobj.type)+currobj.type+currobj.id # The list is already sorted, so if we find an item bigger than # the one we are inserting, we know the position we have to insert the item in. # String comparison should be alpabetically. if currstring > entity_string: self.entity_list_widget.insertItem(i, entity_item) inserted = True break # If we couldn't insert the item, i.e. there are no items at all # or all items are smaller than the item we add, we just add it at the end. if not inserted: self.entity_list_widget.addItem(entity_item) def get_entity_item_pos(self, entityid): for i in range(self.entity_list_widget.count()): item = self.entity_list_widget.item(i) if item.xml_ref == entityid: return i return None def action_passenger_window(self): #if self.passenger_window.isVisible() print("window is visible: ", self.passenger_window.isVisible()) #self.passenger_window.reset() if not self.passenger_window.isVisible(): self.passenger_window.destroy() self.passenger_window = BWPassengerWindow() self.passenger_window.passengerlist.currentItemChanged.connect(self.passengerwindow_action_choose_entity) self.passenger_window.show() self.passenger_window.activateWindow() if self.bw_map_screen.current_entity is not None: self.passenger_window.reset() entityobj = self.level.obj_map[self.bw_map_screen.current_entity] self.passenger_window.set_title(entityobj.id) if entityobj.has_attr("mPassenger"): for i, passenger in enumerate(entityobj.get_attr_elements("mPassenger")): if passenger in self.level.obj_map: passengerobj = self.level.obj_map[passenger] list_item_name = "{0}[{1}]".format(passenger, passengerobj.type) elif passenger == "0": list_item_name = "{0}<none>".format(passenger) else: list_item_name = "{0}<missing>".format(passenger) self.passenger_window.add_passenger(list_item_name, passenger) self.passenger_window.update() def passengerwindow_action_choose_entity(self, current, previous): try: if current is not None and current.xml_ref in self.level.obj_map: self.set_entity_text(current.xml_ref) self.bw_map_screen.choose_entity(current.xml_ref) elif current is not None: self.statusbar.showMessage("No such entity: {0}".format(current.xml_ref), 1000*2) except: traceback.print_exc() def move_entity(self): if not self.dragging: if not self.moving: self.moving = True currtext = self.button_move_entity.text() self.button_move_entity.setText("Stop [Move Entity]") else: self.moving = False currtext = "Move Entity" self.button_move_entity.setText(currtext) def button_load_level(self): try: print("ok", self.default_path) self.xmlPath = "" filepath, choosentype = QFileDialog.getOpenFileName( self, "Open File", self.default_path, BW_LEVEL+";;"+BW_COMPRESSED_LEVEL+";;All files (*)") print("doooone") if filepath: print("resetting") self.reset() print("done") print("chosen type:",choosentype) # Some BW levels are clear XML files, some are compressed with GZIP # We decide between the two either based on user choice or end of filepath if choosentype == BW_COMPRESSED_LEVEL or filepath.endswith(".gz"): print("OPENING AS COMPRESSED") file_open = gzip.open else: file_open = open with file_open(filepath, "rb") as f: try: self.level = BattWarsLevel(f) self.default_path = filepath set_default_path(filepath) self.setup_visibility_toggles() for obj_id, obj in sorted(self.level.obj_map.items(), key=lambda x: get_type(x[1].type)+x[1].type+x[1].id): #print("doing", obj_id) if get_position_attribute(obj) is None: continue #if not obj.has_attr("Mat"): # continue x, y, angle = object_get_position(self.level, obj_id) assert type(x) != str x, y = bw_coords_to_image_coords(x, y) item = BWEntityEntry(obj_id, "{0}[{1}]".format(obj_id, obj.type)) self.entity_list_widget.addItem(item) self.bw_map_screen.add_entity(x, y, obj_id, obj.type, update=False) #if obj.type == "cMapZone": update_mapscreen(self.bw_map_screen, obj) print("ok") self.bw_map_screen.update() path_parts = path.split(filepath) self.setWindowTitle("BW-MapEdit - {0}".format(path_parts[-1])) except Exception as error: print("error", error) traceback.print_exc() except Exception as er: print("errrorrr", er) traceback.print_exc() print("loaded") def button_save_level(self): if self.level is not None: filepath, choosentype = QFileDialog.getSaveFileName( self, "Save File", self.default_path, BW_LEVEL+";;"+BW_COMPRESSED_LEVEL+";;All files (*)") print(filepath, "saved") if filepath: # Simiar to load level if choosentype == BW_COMPRESSED_LEVEL or filepath.endswith(".gz"): file_open = gzip.open else: file_open = open try: with file_open(filepath, "wb") as f: self.level._tree.write(f) except Exception as error: print("COULDN'T SAVE:", error) traceback.print_exc() self.default_path = filepath else: pass # no level loaded, do nothing def entity_position(self, event, entity): try: # Make it possible to select objects in move mode, but don't make it too easy to lose # a selection. if not (self.moving and len(self.bw_map_screen.selected_entities) > 1): print("got entity:",entity, self.bw_map_screen.entities[entity][2]) print(entity_get_model(self.level, entity)) self.set_entity_text(entity) self.bw_map_screen.choose_entity(entity) pos = self.get_entity_item_pos(entity) print("searching:",pos) try: self.entity_list_widget.select_item(pos) except: traceback.print_exc() self.bw_map_screen.selected_entities = {} self.bw_map_screen.update() except: traceback.print_exc() def remove_position(self): #self.bw_map_screen.entities.pop() try: # Remove the entity from the map, the list widget and the level data self.deleting_item = True entities = [] if self.bw_map_screen.current_entity is not None: entities.append(self.bw_map_screen.current_entity) elif len(self.bw_map_screen.selected_entities) > 0: entities.extend(self.bw_map_screen.selected_entities.keys()) self.bw_map_screen.selected_entities = {} self.set_entity_text_multiple(self.bw_map_screen.selected_entities) if len(entities) > 0: for entity in entities: pos = self.get_entity_item_pos(entity) item = self.entity_list_widget.takeItem(pos) assert item.xml_ref == entity #self.entity_list_widget.clearSelection() self.entity_list_widget.clearFocus() self.entity_list_widget.removeItemWidget(item) self.level.remove_object(entity) self.bw_map_screen.remove_entity(entity) self.bw_map_screen.update() except: traceback.print_exc() raise #@catch_exception def get_position(self, event): self.dragging = True self.last_x = event.x() self.last_y = event.y() self.dragged_time = default_timer() mouse_x = event.x()/self.bw_map_screen.zoom_factor mouse_y = event.y()/self.bw_map_screen.zoom_factor if event.buttons() == QtCore.Qt.LeftButton: if not self.moving: self.bw_map_screen.set_selectionbox_start((event.x(), event.y())) else: if self.bw_map_screen.current_entity is not None: newx, newy = image_coords_to_bw_coords(mouse_x, mouse_y) object_set_position(self.level, self.bw_map_screen.current_entity, newx, newy) self.bw_map_screen.move_entity(self.bw_map_screen.current_entity, mouse_x, mouse_y) self.set_entity_text(self.bw_map_screen.current_entity) update_mapscreen(self.bw_map_screen, self.level.obj_map[self.bw_map_screen.current_entity]) elif len(self.bw_map_screen.selected_entities) > 0: for entity in self.bw_map_screen.selected_entities: first_entity = entity break #first_entity = self.bw_map_screen.selected_entities.keys()[0] x, y, entitytype, metadata = self.bw_map_screen.entities[first_entity] startx = endx = x starty = endy = y for entity in self.bw_map_screen.selected_entities: x, y, dontneed, dontneed = self.bw_map_screen.entities[entity] if x < startx: startx = x if x > endx: endx = x if y < starty: starty = y if y > endy: endy = y middle_x = (startx+endx) / 2 middle_y = (starty+endy) / 2 delta_x = mouse_x - middle_x delta_y = mouse_y - middle_y for entity in self.bw_map_screen.selected_entities: x, y, dontneed, dontneed = self.bw_map_screen.entities[entity] newx, newy = image_coords_to_bw_coords(x+delta_x, y+delta_y) object_set_position(self.level, entity, newx, newy) self.bw_map_screen.move_entity(entity, x+delta_x, y+delta_y) #self.set_entity_text(self.bw_map_screen.current_entity) update_mapscreen(self.bw_map_screen, self.level.obj_map[entity]) self.bw_map_screen.update() @catch_exception def mouse_move(self, event): x, y = image_coords_to_bw_coords(event.x()/self.bw_map_screen.zoom_factor, event.y()/self.bw_map_screen.zoom_factor) self.statusbar.showMessage("x: {0} y: {1}".format(round(x, 5), round(y, 5))) if self.dragging and default_timer() - self.dragged_time > 0.1: if event.buttons() == QtCore.Qt.RightButton: delta_x = (event.x()-self.last_x)/8 delta_y = (event.y()-self.last_y)/8 #print("hi",event.x(), event.y()) vertbar = self.scrollArea.verticalScrollBar() horizbar = self.scrollArea.horizontalScrollBar() vertbar.setSliderPosition(vertbar.value()-delta_y) horizbar.setSliderPosition(horizbar.value()-delta_x) elif event.buttons() == QtCore.Qt.LeftButton: self.bw_map_screen.set_selectionbox_end((event.x(), event.y())) if len(self.bw_map_screen.selected_entities) > 0 or self.bw_map_screen.current_entity is None: self.bw_map_screen.choose_entity(None) self.set_entity_text_multiple(self.bw_map_screen.selected_entities) self.bw_map_screen.update() def mouse_release(self, event): self.dragging = False if self.bw_map_screen.selectionbox_end is not None: self.bw_map_screen.clear_selection_box() self.bw_map_screen.update() def set_entity_text_multiple(self, entities): self.label_object_id.setText("{0} objects selected".format(len(entities))) MAX = 15 listentities = [self.level.obj_map[x].name for x in sorted(entities.keys())][0:MAX] listentities.sort() if len(entities) > MAX: listentities.append("... and {0} more".format(len(entities) - len(listentities))) self.label_position.setText("\n".join(listentities[:5])) self.label_model_name.setText("\n".join(listentities[5:10])) self.label_4.setText("\n".join(listentities[10:]))#15])) self.label_5.setText("")#("\n".join(listentities[12:16])) def set_entity_text(self, entityid): try: obj = self.level.obj_map[entityid] if obj.has_attr("mBase"): base = self.level.obj_map[obj.get_attr_value("mBase")] self.label_object_id.setText("{0}\n[{1}]\nBase: {2}\n[{3}]".format( entityid, obj.type, base.id, base.type)) else: self.label_object_id.setText("{0}\n[{1}]".format(entityid, obj.type)) self.label_model_name.setText("Model: {0}".format(entity_get_model(self.level, entityid))) x, y, angle = object_get_position(self.level, entityid) self.label_position.setText("x: {0}\ny: {1}".format(x, y)) self.lineedit_angle.setText(str(round(angle,2))) self.label_4.setText("Army: {0}".format(entity_get_army(self.level, entityid))) if not obj.has_attr("mPassenger"): self.label_5.setText("Icon Type: \n{0}".format(entity_get_icon_type(self.level, entityid))) else: passengers = 0 for passenger in obj.get_attr_elements("mPassenger"): if passenger != "0": passengers += 1 self.label_5.setText("Icon Type: \n{0}\n\nPassengers: {1}".format( entity_get_icon_type(self.level, entityid), passengers)) except: traceback.print_exc() def action_listwidget_change_selection(self, current, previous): #QtWidgets.QListWidgetItem. if not self.resetting and current is not None: print("ok") print("hi", current.text(), current.xml_ref) self.set_entity_text(current.xml_ref) self.bw_map_screen.choose_entity(current.xml_ref) posx, posy, typename, metadata = self.bw_map_screen.entities[current.xml_ref] zf = self.bw_map_screen.zoom_factor try: if not self.deleting_item: x_margin = min(100, 50*zf) y_margin = min(100, 50*zf) self.scrollArea.ensureVisible(posx*zf, posy*zf, xMargin=x_margin, yMargin=y_margin) else: self.deleting_item = False except: traceback.print_exc() def zoom_out(self, noslider=False): horizbar = self.scrollArea.horizontalScrollBar() vertbar = self.scrollArea.verticalScrollBar() print(horizbar.maximum(), vertbar.maximum()) if horizbar.maximum() > 0: widthratio = horizbar.value()/horizbar.maximum() else: widthratio = 0 if vertbar.maximum() > 0: heightratio = vertbar.value()/vertbar.maximum() else: heightratio = 0 #oldzf = self.bw_map_screen.zoom_factor / (0.1+1) #diff = oldzf - self.bw_map_screen.zoom_factor zf = self.bw_map_screen.zoom_factor self.bw_map_screen.zoom(calc_zoom_out_factor(zf))#diff) # if not noslider: horizbar.setSliderPosition(horizbar.maximum()*widthratio) vertbar.setSliderPosition(vertbar.maximum()*heightratio) self.bw_map_screen.update() self.statusbar.showMessage("Zoom: {0}x".format(self.bw_map_screen.zoom_factor)) def zoom_in(self, noslider=False): horizbar = self.scrollArea.horizontalScrollBar() vertbar = self.scrollArea.verticalScrollBar() if horizbar.maximum() > 0: widthratio = horizbar.value()/horizbar.maximum() else: widthratio = 0 if vertbar.maximum() > 0: heightratio = vertbar.value()/vertbar.maximum() else: heightratio = 0 zf = self.bw_map_screen.zoom_factor self.bw_map_screen.zoom(calc_zoom_in_factor(zf))#zf) # print("wedidit?") if not noslider: horizbar.setSliderPosition(horizbar.maximum()*widthratio) vertbar.setSliderPosition(vertbar.maximum()*heightratio) self.bw_map_screen.update() self.statusbar.showMessage("Zoom: {0}x".format(self.bw_map_screen.zoom_factor)) @catch_exception def mouse_wheel_scroll_zoom(self, wheel_event): print("scrolling", wheel_event) print("Scroll", wheel_event.x(), wheel_event.y(), wheel_event.angleDelta().y())#, wheel_event.delta()) wheel_delta = wheel_event.angleDelta().y() zf = self.bw_map_screen.zoom_factor norm_x = wheel_event.x()/zf norm_y = wheel_event.y()/zf if wheel_delta > 0: if zf <= 10: self.zoom_in(True) zf = self.bw_map_screen.zoom_factor xmargin = self.scrollArea.viewport().width()//2 - 200 ymargin = self.scrollArea.viewport().height()//2 - 200 self.scrollArea.ensureVisible(norm_x*zf, norm_y*zf, xmargin, ymargin) self.bw_map_screen.update() else: self.zoom_in() elif wheel_delta < 0: self.zoom_out() def action_lineedit_changeangle(self): if not self.resetting and self.bw_map_screen.current_entity is not None: print("ok") current = self.bw_map_screen.current_entity currx, curry, angle = object_get_position(self.level, current) newangle = self.lineedit_angle.text().strip() print(newangle, newangle.isdecimal()) try: angle = float(newangle) object_set_position(self.level, current, currx, curry, angle=angle) currentobj = self.level.obj_map[current] update_mapscreen(self.bw_map_screen, currentobj) self.bw_map_screen.update() except: traceback.print_exc() def button_terrain_load_action(self): try: print("ok", self.default_path) filepath, choosentype = QFileDialog.getOpenFileName( self, "Open File", self.default_path, "BW terrain files (*.out *out.gz);;All files (*)") print("doooone") if filepath: if filepath.endswith(".gz"): file_open = gzip.open else: file_open = open with file_open(filepath, "rb") as f: try: terrain = BWArchiveBase(f) if self.level is not None: waterheight = get_water_height(self.level) else: waterheight = None image, light_image = parse_terrain_to_image(terrain, waterheight) self.bw_map_screen.set_terrain(image, light_image) except: traceback.print_exc() except: traceback.print_exc() def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(820, 760) MainWindow.setMinimumSize(QSize(720, 560)) MainWindow.setWindowTitle("BW-MapEdit") #MainWindow.setWindowTitle("Nep-Nep") self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") MainWindow.setCentralWidget(self.centralwidget) self.horizontalLayout = QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.scrollArea = QScrollArea(self.centralwidget) self.scrollArea.setWidgetResizable(True) self.bw_map_screen = BWMapViewer(self.centralwidget) self.scrollArea.setWidget(self.bw_map_screen) self.horizontalLayout.addWidget(self.scrollArea) #self.horizontalLayout.addWidget(self.bw_map_screen) self.entity_list_widget = BWEntityListWidget(self.centralwidget) self.entity_list_widget.setMaximumSize(QSize(300, 16777215)) self.entity_list_widget.setObjectName("entity_list_widget") self.horizontalLayout.addWidget(self.entity_list_widget) spacerItem = QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) self.horizontalLayout.addItem(spacerItem) self.vertLayoutWidget = QWidget(self.centralwidget) self.vertLayoutWidget.setMaximumSize(QSize(250, 1200)) self.verticalLayout = QVBoxLayout(self.vertLayoutWidget) self.verticalLayout.setObjectName("verticalLayout") #self.verticalLayout. self.button_clone_entity = QPushButton(self.centralwidget) self.button_clone_entity.setObjectName("button_clone_entity") self.verticalLayout.addWidget(self.button_clone_entity) self.button_remove_entity = QPushButton(self.centralwidget) self.button_remove_entity.setObjectName("button_remove_entity") self.verticalLayout.addWidget(self.button_remove_entity) self.button_move_entity = QPushButton(self.centralwidget) self.button_move_entity.setObjectName("button_move_entity") self.verticalLayout.addWidget(self.button_move_entity) self.button_show_passengers = QPushButton(self.centralwidget) self.button_show_passengers.setObjectName("button_move_entity") self.verticalLayout.addWidget(self.button_show_passengers) self.gridLayout = QGridLayout() self.gridLayout.setObjectName("gridLayout") self.button_zoom_in = QPushButton(self.centralwidget) self.button_zoom_in.setObjectName("button_zoom_in") self.gridLayout.addWidget(self.button_zoom_in, 0, 0, 0, 1) self.button_zoom_out = QPushButton(self.centralwidget) self.button_zoom_out.setObjectName("button_zoom_out") self.gridLayout.addWidget(self.button_zoom_out, 0, 1, 0, 1) self.button_edit_xml = QPushButton(self.centralwidget) self.button_edit_xml.setObjectName("button_edit_xml") self.button_edit_base_xml = QPushButton(self.centralwidget) self.button_edit_base_xml.setObjectName("button_edit_base_xml") self.verticalLayout.addLayout(self.gridLayout) self.verticalLayout.addWidget(self.button_edit_xml) self.verticalLayout.addWidget(self.button_edit_base_xml) spacerItem1 = QSpacerItem(10, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.verticalLayout.addItem(spacerItem1) self.verticalLayout_2 = QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.lineedit_angle = QLineEdit(self.centralwidget) self.lineedit_angle.setObjectName("lineedit_angle") self.lineedit_angle.setPlaceholderText("Angle") self.label_object_id = QLabel(self.centralwidget) self.label_object_id.setObjectName("label_object_id") #TextSelectableByCursor self.label_position = QLabel(self.centralwidget) self.label_position.setObjectName("label_position") self.label_model_name = QLabel(self.centralwidget) self.label_model_name.setObjectName("label_model_name") self.label_4 = QLabel(self.centralwidget) self.label_4.setObjectName("label_4") self.label_5 = QLabel(self.centralwidget) self.label_5.setObjectName("label_5") for label in (self.label_object_id, self.label_position, self.label_model_name, self.label_4, self.label_5): label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) self.verticalLayout_2.addWidget(self.lineedit_angle) self.verticalLayout_2.addWidget(self.label_object_id) self.verticalLayout_2.addWidget(self.label_position) self.verticalLayout_2.addWidget(self.label_model_name) self.verticalLayout_2.addWidget(self.label_4) self.verticalLayout_2.addWidget(self.label_5) self.verticalLayout.addLayout(self.verticalLayout_2) self.horizontalLayout.addWidget(self.vertLayoutWidget) self.menubar = QMenuBar(MainWindow) self.menubar.setGeometry(QRect(0, 0, 820, 29)) self.menubar.setObjectName("menubar") self.file_menu = QMenu(self.menubar) self.file_menu.setObjectName("menuLoad") self.file_load_action = QAction("Load", self) self.file_load_action.triggered.connect(self.button_load_level) self.file_menu.addAction(self.file_load_action) self.file_save_action = QAction("Save", self) self.file_save_action.triggered.connect(self.button_save_level) self.file_menu.addAction(self.file_save_action) self.visibility_menu = MenuDontClose(self.menubar)#QMenu(self.menubar) self.visibility_menu.setObjectName("visibility") #self.visibility_menu.addAction(self.toggle_action) self.visibility_actions = [] self.terrain_menu = QMenu(self.menubar) self.terrain_menu.setObjectName("terrain") self.terrain_load_action = QAction("Load Terrain", self) self.terrain_load_action.triggered.connect(self.button_terrain_load_action) self.terrain_menu.addAction(self.terrain_load_action) self.terrain_display_actions = [] self.setup_terrain_display_toggles() #self.menuLoad_2 = QMenu(self.menubar) #self.menuLoad_2.setObjectName("menuLoad_2") MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.menubar.addAction(self.file_menu.menuAction()) #self.menubar.addAction(self.menuLoad_2.menuAction()) self.menubar.addAction(self.visibility_menu.menuAction()) self.menubar.addAction(self.terrain_menu.menuAction()) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) def make_terrain_toggle(self, show_mode): def terraintoggle(toggled): print("I am", show_mode, "and I was pressed") if toggled is True: for action, toggle, mode in self.terrain_display_actions: if mode != show_mode: action.setChecked(False) self.bw_map_screen.set_show_terrain_mode(show_mode) elif toggled is False: self.bw_map_screen.set_show_terrain_mode(SHOW_TERRAIN_NO_TERRAIN) else: print("This shouldn't be possible", toggled, type(toggled)) self.bw_map_screen.update() return terraintoggle def setup_terrain_display_toggles(self): for mode, name in ((SHOW_TERRAIN_REGULAR, "Show Heightmap"), (SHOW_TERRAIN_LIGHT, "Show Lightmap")): toggle = self.make_terrain_toggle(mode) toggle_action = QAction(name, self) toggle_action.setCheckable(True) if mode == SHOW_TERRAIN_REGULAR: toggle_action.setChecked(True) else: toggle_action.setChecked(False) toggle_action.triggered.connect(toggle) self.terrain_menu.addAction(toggle_action) self.terrain_display_actions.append((toggle_action, toggle, mode)) def clear_terrain_toggles(self): try: for action, func, mode in self.terrain_display_actions: self.terrain_menu.removeAction(action) self.terrain_display_actions = [] except: traceback.print_exc() def make_toggle_function(self, objtype): def toggle(toggled): print("i was pressed") my_type = copy(objtype) self.types_visible[my_type] = toggled self.bw_map_screen.set_visibility(self.types_visible) self.bw_map_screen.update() return toggle def setup_visibility_toggles(self): for objtype in sorted(self.level.objtypes_with_positions): toggle = self.make_toggle_function(objtype) toggle_action = QAction(copy(objtype), self) toggle_action.setCheckable(True) toggle_action.setChecked(True) toggle_action.triggered.connect(toggle) self.types_visible[objtype] = True self.visibility_menu.addAction(toggle_action) self.visibility_actions.append((toggle_action, toggle)) toggle_all = QAction("Toggle All", self) toggle_all.triggered.connect(self.toggle_visiblity_all) self.visibility_menu.addAction(toggle_all) self.visibility_actions.append((toggle_all, self.toggle_visiblity_all)) def toggle_visiblity_all(self): for action, func in self.visibility_actions: if action.isCheckable(): objtype = action.text() toggle = self.types_visible[objtype] self.types_visible[objtype] = not toggle action.setChecked(not toggle) self.bw_map_screen.set_visibility(self.types_visible) self.bw_map_screen.update() def clear_visibility_toggles(self): try: for action, func in self.visibility_actions: self.visibility_menu.removeAction(action) self.visibility_actions = [] self.types_visible = {} except: traceback.print_exc() def retranslateUi(self, MainWindow): _translate = QCoreApplication.translate self.button_clone_entity.setText(_translate("MainWindow", "Clone Entity")) self.button_remove_entity.setText(_translate("MainWindow", "Delete Entity")) self.button_move_entity.setText(_translate("MainWindow", "Move Entity")) self.button_zoom_in.setText(_translate("MainWindow", "Zoom In")) self.button_zoom_out.setText(_translate("MainWindow", "Zoom Out")) self.button_show_passengers.setText(_translate("MainWindow", "Show Passengers")) self.button_edit_xml.setText("Edit Object XML") self.button_edit_base_xml.setText("Edit Base Object XML") self.label_model_name.setText(_translate("MainWindow", "TextLabel1")) self.label_object_id.setText(_translate("MainWindow", "TextLabel2")) self.label_position.setText(_translate("MainWindow", "TextLabel3")) self.label_4.setText(_translate("MainWindow", "TextLabel4")) self.label_5.setText(_translate("MainWindow", "TextLabel5")) self.file_menu.setTitle(_translate("MainWindow", "File")) self.visibility_menu.setTitle(_translate("MainWindow", "Visibility")) self.terrain_menu.setTitle("Terrain")
class UIPreviewer(E5MainWindow): """ Class implementing the UI Previewer main window. """ def __init__(self, filename=None, parent=None, name=None): """ Constructor @param filename name of a UI file to load @param parent parent widget of this window (QWidget) @param name name of this window (string) """ self.mainWidget = None self.currentFile = QDir.currentPath() super(UIPreviewer, self).__init__(parent) if not name: self.setObjectName("UIPreviewer") else: self.setObjectName(name) self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) self.resize(QSize(600, 480).expandedTo(self.minimumSizeHint())) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.tr("UI Previewer")) self.cw = QWidget(self) self.cw.setObjectName("centralWidget") self.UIPreviewerLayout = QVBoxLayout(self.cw) self.UIPreviewerLayout.setContentsMargins(6, 6, 6, 6) self.UIPreviewerLayout.setSpacing(6) self.UIPreviewerLayout.setObjectName("UIPreviewerLayout") self.styleLayout = QHBoxLayout() self.styleLayout.setContentsMargins(0, 0, 0, 0) self.styleLayout.setSpacing(6) self.styleLayout.setObjectName("styleLayout") self.styleLabel = QLabel(self.tr("Select GUI Theme"), self.cw) self.styleLabel.setObjectName("styleLabel") self.styleLayout.addWidget(self.styleLabel) self.styleCombo = QComboBox(self.cw) self.styleCombo.setObjectName("styleCombo") self.styleCombo.setEditable(False) self.styleCombo.setToolTip(self.tr("Select the GUI Theme")) self.styleLayout.addWidget(self.styleCombo) self.styleCombo.addItems(sorted(QStyleFactory().keys())) currentStyle = Preferences.Prefs.settings.value('UIPreviewer/style') if currentStyle is not None: self.styleCombo.setCurrentIndex(int(currentStyle)) styleSpacer = QSpacerItem( 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.styleLayout.addItem(styleSpacer) self.UIPreviewerLayout.addLayout(self.styleLayout) self.previewSV = QScrollArea(self.cw) self.previewSV.setObjectName("preview") self.previewSV.setFrameShape(QFrame.NoFrame) self.previewSV.setFrameShadow(QFrame.Plain) self.previewSV.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Expanding) self.UIPreviewerLayout.addWidget(self.previewSV) self.setCentralWidget(self.cw) self.styleCombo.activated[str].connect(self.__guiStyleSelected) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # defere loading of a UI file until we are shown self.fileToLoad = filename def show(self): """ Public slot to show this dialog. This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window. """ super(UIPreviewer, self).show() if self.fileToLoad is not None: fn, self.fileToLoad = (self.fileToLoad, None) self.__loadFile(fn) def __initActions(self): """ Private method to define the user interface actions. """ self.openAct = QAction( UI.PixmapCache.getIcon("openUI.png"), self.tr('&Open File'), self) self.openAct.setShortcut( QKeySequence(self.tr("Ctrl+O", "File|Open"))) self.openAct.setStatusTip(self.tr('Open a UI file for display')) self.openAct.setWhatsThis(self.tr( """<b>Open File</b>""" """<p>This opens a new UI file for display.</p>""" )) self.openAct.triggered.connect(self.__openFile) self.printAct = QAction( UI.PixmapCache.getIcon("print.png"), self.tr('&Print'), self) self.printAct.setShortcut( QKeySequence(self.tr("Ctrl+P", "File|Print"))) self.printAct.setStatusTip(self.tr('Print a screen capture')) self.printAct.setWhatsThis(self.tr( """<b>Print</b>""" """<p>Print a screen capture.</p>""" )) self.printAct.triggered.connect(self.__printImage) self.printPreviewAct = QAction( UI.PixmapCache.getIcon("printPreview.png"), self.tr('Print Preview'), self) self.printPreviewAct.setStatusTip(self.tr( 'Print preview a screen capture')) self.printPreviewAct.setWhatsThis(self.tr( """<b>Print Preview</b>""" """<p>Print preview a screen capture.</p>""" )) self.printPreviewAct.triggered.connect(self.__printPreviewImage) self.imageAct = QAction( UI.PixmapCache.getIcon("screenCapture.png"), self.tr('&Screen Capture'), self) self.imageAct.setShortcut( QKeySequence(self.tr("Ctrl+S", "File|Screen Capture"))) self.imageAct.setStatusTip(self.tr( 'Save a screen capture to an image file')) self.imageAct.setWhatsThis(self.tr( """<b>Screen Capture</b>""" """<p>Save a screen capture to an image file.</p>""" )) self.imageAct.triggered.connect(self.__saveImage) self.exitAct = QAction( UI.PixmapCache.getIcon("exit.png"), self.tr('&Quit'), self) self.exitAct.setShortcut( QKeySequence(self.tr("Ctrl+Q", "File|Quit"))) self.exitAct.setStatusTip(self.tr('Quit the application')) self.exitAct.setWhatsThis(self.tr( """<b>Quit</b>""" """<p>Quit the application.</p>""" )) self.exitAct.triggered.connect(qApp.closeAllWindows) self.copyAct = QAction( UI.PixmapCache.getIcon("editCopy.png"), self.tr('&Copy'), self) self.copyAct.setShortcut( QKeySequence(self.tr("Ctrl+C", "Edit|Copy"))) self.copyAct.setStatusTip( self.tr('Copy screen capture to clipboard')) self.copyAct.setWhatsThis(self.tr( """<b>Copy</b>""" """<p>Copy screen capture to clipboard.</p>""" )) self.copyAct.triggered.connect(self.__copyImageToClipboard) self.whatsThisAct = QAction( UI.PixmapCache.getIcon("whatsThis.png"), self.tr('&What\'s This?'), self) self.whatsThisAct.setShortcut(QKeySequence(self.tr("Shift+F1"))) self.whatsThisAct.setStatusTip(self.tr('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.tr( """<b>Display context sensitive help</b>""" """<p>In What's This? mode, the mouse cursor shows an arrow""" """ with a question mark, and you can click on the interface""" """ elements to get a short description of what they do and""" """ how to use them. In dialogs, this feature can be accessed""" """ using the context help button in the titlebar.</p>""" )) self.whatsThisAct.triggered.connect(self.__whatsThis) self.aboutAct = QAction(self.tr('&About'), self) self.aboutAct.setStatusTip(self.tr( 'Display information about this software')) self.aboutAct.setWhatsThis(self.tr( """<b>About</b>""" """<p>Display some information about this software.</p>""" )) self.aboutAct.triggered.connect(self.__about) self.aboutQtAct = QAction(self.tr('About &Qt'), self) self.aboutQtAct.setStatusTip( self.tr('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.tr( """<b>About Qt</b>""" """<p>Display some information about the Qt toolkit.</p>""" )) self.aboutQtAct.triggered.connect(self.__aboutQt) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.tr('&File')) menu.setTearOffEnabled(True) menu.addAction(self.openAct) menu.addAction(self.imageAct) menu.addSeparator() menu.addAction(self.printPreviewAct) menu.addAction(self.printAct) menu.addSeparator() menu.addAction(self.exitAct) menu = mb.addMenu(self.tr("&Edit")) menu.setTearOffEnabled(True) menu.addAction(self.copyAct) mb.addSeparator() menu = mb.addMenu(self.tr('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.tr("File")) filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.openAct) filetb.addAction(self.imageAct) filetb.addSeparator() filetb.addAction(self.printPreviewAct) filetb.addAction(self.printAct) filetb.addSeparator() filetb.addAction(self.exitAct) edittb = self.addToolBar(self.tr("Edit")) edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.copyAct) helptb = self.addToolBar(self.tr("Help")) helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __guiStyleSelected(self, selectedStyle): """ Private slot to handle the selection of a GUI style. @param selectedStyle name of the selected style (string) """ if self.mainWidget: self.__updateChildren(selectedStyle) def __about(self): """ Private slot to show the about information. """ E5MessageBox.about( self, self.tr("UI Previewer"), self.tr( """<h3> About UI Previewer </h3>""" """<p>The UI Previewer loads and displays Qt User-Interface""" """ files with various styles, which are selectable via a""" """ selection list.</p>""" ) ) def __aboutQt(self): """ Private slot to show info about Qt. """ E5MessageBox.aboutQt(self, self.tr("UI Previewer")) def __openFile(self): """ Private slot to load a new file. """ fn = E5FileDialog.getOpenFileName( self, self.tr("Select UI file"), self.currentFile, self.tr("Qt User-Interface Files (*.ui)")) if fn: self.__loadFile(fn) def __loadFile(self, fn): """ Private slot to load a ui file. @param fn name of the ui file to be laoded (string) """ if self.mainWidget: self.mainWidget.close() self.previewSV.takeWidget() del self.mainWidget self.mainWidget = None # load the file try: self.mainWidget = uic.loadUi(fn) except: pass if self.mainWidget: self.currentFile = fn self.__updateChildren(self.styleCombo.currentText()) if isinstance(self.mainWidget, QDialog) or \ isinstance(self.mainWidget, QMainWindow): self.mainWidget.show() self.mainWidget.installEventFilter(self) else: self.previewSV.setWidget(self.mainWidget) self.mainWidget.show() else: E5MessageBox.warning( self, self.tr("Load UI File"), self.tr( """<p>The file <b>{0}</b> could not be loaded.</p>""") .format(fn)) self.__updateActions() def __updateChildren(self, sstyle): """ Private slot to change the style of the show UI. @param sstyle name of the selected style (string) """ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) qstyle = QStyleFactory.create(sstyle) self.mainWidget.setStyle(qstyle) lst = self.mainWidget.findChildren(QWidget) for obj in lst: try: obj.setStyle(qstyle) except AttributeError: pass del lst self.mainWidget.hide() self.mainWidget.show() self.lastQStyle = qstyle self.lastStyle = sstyle Preferences.Prefs.settings.setValue( 'UIPreviewer/style', self.styleCombo.currentIndex()) QApplication.restoreOverrideCursor() def __updateActions(self): """ Private slot to update the actions state. """ if self.mainWidget: self.imageAct.setEnabled(True) self.printAct.setEnabled(True) if self.printPreviewAct: self.printPreviewAct.setEnabled(True) self.copyAct.setEnabled(True) self.styleCombo.setEnabled(True) else: self.imageAct.setEnabled(False) self.printAct.setEnabled(False) if self.printPreviewAct: self.printPreviewAct.setEnabled(False) self.copyAct.setEnabled(False) self.styleCombo.setEnabled(False) def __handleCloseEvent(self): """ Private slot to handle the close event of a viewed QMainWidget. """ if self.mainWidget: self.mainWidget.removeEventFilter(self) del self.mainWidget self.mainWidget = None self.__updateActions() def eventFilter(self, obj, ev): """ Public method called to filter an event. @param obj object, that generated the event (QObject) @param ev the event, that was generated by object (QEvent) @return flag indicating if event was filtered out """ if obj == self.mainWidget: if ev.type() == QEvent.Close: self.__handleCloseEvent() return True else: if isinstance(self.mainWidget, QDialog): return QDialog.eventFilter(self, obj, ev) elif isinstance(self.mainWidget, QMainWindow): return QMainWindow.eventFilter(self, obj, ev) else: return False def __saveImage(self): """ Private slot to handle the Save Image menu action. """ if self.mainWidget is None: E5MessageBox.critical( self, self.tr("Save Image"), self.tr("""There is no UI file loaded.""")) return defaultExt = "PNG" filters = "" formats = QImageWriter.supportedImageFormats() for format in formats: filters = "{0}*.{1} ".format( filters, bytes(format).decode().lower()) filter = self.tr("Images ({0})").format(filters[:-1]) fname = E5FileDialog.getSaveFileName( self, self.tr("Save Image"), "", filter) if not fname: return ext = QFileInfo(fname).suffix().upper() if not ext: ext = defaultExt fname.append(".{0}".format(defaultExt.lower())) if qVersion() >= "5.0.0": pix = self.mainWidget.grab() else: pix = QPixmap.grabWidget(self.mainWidget) self.__updateChildren(self.lastStyle) if not pix.save(fname, str(ext)): E5MessageBox.critical( self, self.tr("Save Image"), self.tr( """<p>The file <b>{0}</b> could not be saved.</p>""") .format(fname)) def __copyImageToClipboard(self): """ Private slot to handle the Copy Image menu action. """ if self.mainWidget is None: E5MessageBox.critical( self, self.tr("Save Image"), self.tr("""There is no UI file loaded.""")) return cb = QApplication.clipboard() if qVersion() >= "5.0.0": cb.setPixmap(self.mainWidget.grab()) else: cb.setPixmap(QPixmap.grabWidget(self.mainWidget)) self.__updateChildren(self.lastStyle) def __printImage(self): """ Private slot to handle the Print Image menu action. """ if self.mainWidget is None: E5MessageBox.critical( self, self.tr("Print Image"), self.tr("""There is no UI file loaded.""")) return settings = Preferences.Prefs.settings printer = QPrinter(QPrinter.HighResolution) printer.setFullPage(True) printerName = Preferences.getPrinter("UIPreviewer/printername") if printerName: printer.setPrinterName(printerName) printer.setPageSize( QPrinter.PageSize(int(settings.value("UIPreviewer/pagesize")))) printer.setPageOrder( QPrinter.PageOrder(int(settings.value("UIPreviewer/pageorder")))) printer.setOrientation(QPrinter.Orientation( int(settings.value("UIPreviewer/orientation")))) printer.setColorMode( QPrinter.ColorMode(int(settings.value("UIPreviewer/colormode")))) printDialog = QPrintDialog(printer, self) if printDialog.exec_() == QDialog.Accepted: self.statusBar().showMessage(self.tr("Printing the image...")) self.__print(printer) settings.setValue("UIPreviewer/printername", printer.printerName()) settings.setValue("UIPreviewer/pagesize", printer.pageSize()) settings.setValue("UIPreviewer/pageorder", printer.pageOrder()) settings.setValue("UIPreviewer/orientation", printer.orientation()) settings.setValue("UIPreviewer/colormode", printer.colorMode()) self.statusBar().showMessage( self.tr("Image sent to printer..."), 2000) def __printPreviewImage(self): """ Private slot to handle the Print Preview menu action. """ from PyQt5.QtPrintSupport import QPrintPreviewDialog if self.mainWidget is None: E5MessageBox.critical( self, self.tr("Print Preview"), self.tr("""There is no UI file loaded.""")) return settings = Preferences.Prefs.settings printer = QPrinter(QPrinter.HighResolution) printer.setFullPage(True) printerName = Preferences.getPrinter("UIPreviewer/printername") if printerName: printer.setPrinterName(printerName) printer.setPageSize( QPrinter.PageSize(int(settings.value("UIPreviewer/pagesize")))) printer.setPageOrder( QPrinter.PageOrder(int(settings.value("UIPreviewer/pageorder")))) printer.setOrientation(QPrinter.Orientation( int(settings.value("UIPreviewer/orientation")))) printer.setColorMode( QPrinter.ColorMode(int(settings.value("UIPreviewer/colormode")))) preview = QPrintPreviewDialog(printer, self) preview.paintRequested.connect(self.__print) preview.exec_() def __print(self, printer): """ Private slot to the actual printing. @param printer reference to the printer object (QPrinter) """ p = QPainter(printer) marginX = (printer.pageRect().x() - printer.paperRect().x()) // 2 marginY = (printer.pageRect().y() - printer.paperRect().y()) // 2 # double the margin on bottom of page if printer.orientation() == QPrinter.Portrait: width = printer.width() - marginX * 2 height = printer.height() - marginY * 3 else: marginX *= 2 width = printer.width() - marginX * 2 height = printer.height() - marginY * 2 if qVersion() >= "5.0.0": img = self.mainWidget.grab().toImage() else: img = QPixmap.grabWidget(self.mainWidget).toImage() self.__updateChildren(self.lastStyle) p.drawImage(marginX, marginY, img.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation)) p.end()