Пример #1
0
def create_schedule_day(gui_window, scraper_object, current_date):
    """Create the schedule for all trips for the given day

    Parameters
    ----------
    gui_window : Ui_Form
        The Ui_Form object associated with the main gui
    scraper_object : scraper
        The scraper object used to extract data from the inputted excel file
    current_date : date
        A date object representing the date for which a schedule must be
        created

    Method Calls
    ------------
        -reset_this_period()
        -add_new_date()
        -calculate_previous_date()
        -get_total_guides()
        -get_total_drivers()
        -create_schedule_role()
        -copy_schedule_role()
    """

    #copyfile('trips.db', 'trips_backup.db')
    #copyfile('staff.db', 'staff_backup.db')

    #try:
    day_of_week = int(
        datetime.datetime.strptime(current_date, '%Y-%m-%d').strftime('%w'))

    print("DAY OF WEEK: ", day_of_week)

    if day_of_week == 0:
        print("MAKING SCHEDULE FOR MONDAY")
        manage_staff.staff_util.reset_this_period(session_guide,
                                                  session_driver)

    current_date_object = create_new_schedule.add_new_date(current_date)
    temp_guide = 0
    temp_driver = 0
    print("\n")
    print("CREATING SHEDULE FOR ", current_date)
    trips = scraper_object.get_day(current_date)
    trip_role_assignment = {}
    class_IV_needed = {}
    num_clients = {}
    num_drivers = {}
    num_guides = {}
    num_class_IV_drivers = 0
    max_drivers = [0, 0, 0, 0, 0, 0, 0, 0]
    max_guides = [0, 0, 0, 0, 0, 0, 0, 0]
    num_safety = 0

    previous_date = schedule_util.calculate_previous_date(current_date)

    for trip_name in trips:
        num_clients[trip_name] = int(trips[trip_name])
        if trip_name == "Ticket to Ride - 09:30:00":

            if num_clients[trip_name] > 0:

                num_guides[trip_name] = int((num_clients[trip_name] // 10) +
                                            (num_clients[trip_name] % 10 > 0))

                num_drivers[trip_name] = int((num_clients[trip_name] // 20) +
                                             (num_clients[trip_name] % 20 > 0))

                max_guides[
                    create_schedule.schedule_dictionaries.
                    max_guides_trip_swictch[trip_name]] = num_guides[trip_name]

                max_drivers[create_schedule.schedule_dictionaries.
                            max_guides_trip_swictch[trip_name]] = num_drivers[
                                trip_name]

                DialogBox = QtWidgets.QDialog()
                ui_guides = popups.overnight_popup.Ui_overnight_popup()
                ui_guides.setupUi(DialogBox, num_guides[trip_name],
                                  current_date, trip_role_assignment,
                                  DialogBox)
                DialogBox.show()

                if DialogBox.exec_():
                    trip_role_assignment = ui_guides.return_data()

            else:

                num_guides[trip_name] = 0
                num_drivers[trip_name] = 0

        else:

            num_guides[trip_name] = int((num_clients[trip_name] // 10) +
                                        (num_clients[trip_name] % 10 > 0))

            num_drivers[trip_name] = int((num_clients[trip_name] // 20) +
                                         (num_clients[trip_name] % 20 > 0))

            if num_guides[trip_name] > max_guides[
                    create_schedule.schedule_dictionaries.
                    max_guides_trip_swictch[trip_name]]:

                max_guides[
                    create_schedule.schedule_dictionaries.
                    max_guides_trip_swictch[trip_name]] = num_guides[trip_name]

            if num_drivers[trip_name] > max_drivers[
                    create_schedule.schedule_dictionaries.
                    max_guides_trip_swictch[trip_name]]:
                max_drivers[create_schedule.schedule_dictionaries.
                            max_guides_trip_swictch[trip_name]] = num_drivers[
                                trip_name]

            print("\n")
            print("FOR: ", trip_name)
            print("NUMBER OF CLIENTS: ", num_clients[trip_name])
            print("NUMBER OF GUIDES NEEDED: ", num_guides[trip_name])
            print("NUMBER OF DRIVERS NEEDED: ", num_drivers[trip_name])
            print("\n")

    total_guides_needed = 0
    total_drivers_needed = 0

    for x in num_guides:
        total_guides_needed += num_guides[x]

    for x in num_drivers:
        total_drivers_needed += num_drivers[x]

    if total_guides_needed > len(
            manage_staff.staff_util.get_total_guides(session_guide)):

        num_times = total_guides_needed - len(
            manage_staff.staff_util.get_total_guides(session_guide))
        print("TEMP GUIDES NEEDED: ", num_times)

        for i in range(num_times):

            print("CHOOSING TEMP GUIDE ", i)
            DialogBox = QtWidgets.QDialog()
            ui_guides = popups.not_enough_guides_popup.Ui_not_enough_guides_popup(
            )
            ui_guides.setupUi(DialogBox, DialogBox)
            DialogBox.show()

            if DialogBox.exec_():
                temp_guide = ui_guides.return_temp_guide()

                temp_guide_object = session_guide.query(
                    manage_staff.guide.guide).filter(
                        manage_staff.guide.guide.name.in_(
                            [temp_guide])).update({'in_stream': 'true'},
                                                  synchronize_session=False)

                session_guide.commit()

                print("\n")
                print(
                    "TEMP GUIDE INSTREAM SET TO TRUE: ",
                    session_guide.query(manage_staff.guide.guide).filter(
                        manage_staff.guide.guide.name.in_([temp_guide])))
                print("\n")

    if total_drivers_needed > len(
            manage_staff.staff_util.get_total_drivers(session_driver)):

        num_times = total_drivers_needed - len(
            manage_staff.staff_util.get_total_drivers(session_driver))
        print("TEMP DRIVERS NEEDED: ", num_times)

        for i in range(num_times):

            print("CHOOSING TEMP DRIVER ", i)

            DialogBox = QtWidgets.QDialog()
            ui_drivers = popups.not_enough_drivers_popup.Ui_not_enough_drivers_popup(
            )
            ui_drivers.setupUi(DialogBox, DialogBox)
            DialogBox.show()

            print("shown")

            if DialogBox.exec_():
                print("exec")
                temp_driver = ui_drivers.return_temp_driver()

                temp_driver_object = session_driver.query(
                    manage_staff.driver.driver).filter(
                        manage_staff.driver.driver.name.in_(
                            [temp_driver])).update({'in_stream': 'true'},
                                                   synchronize_session=False)

                session_driver.commit()

                print(
                    "Set to true : ",
                    session_driver.query(manage_staff.driver.driver).filter(
                        manage_staff.driver.driver.name.in_([temp_driver])))

    for trip in create_schedule.schedule_dictionaries.trip_number_switch:

        if trip not in num_clients:

            num_clients[trip] = 0
            num_guides[trip] = 0
            num_drivers[trip] = 0

            print("\n")
            print("FOR: ", trip_name)
            print("NUMBER OF CLIENTS: ", num_clients)
            print("NUMBER OF GUIDES NEEDED: ", num_guides)
            print("NUMBER OF DRIVERS NEEDED: ", num_drivers)
            print("\n")

    num_class_IV_drivers = total_drivers_needed
    print("\n")
    print("NUM CLASS IV DRIVERS NEEDED: ", num_class_IV_drivers)

    total_drivers = manage_staff.staff_util.get_total_drivers(session_driver)
    drivers_with_class_IV = 0

    for index, value in enumerate(total_drivers):
        if total_drivers[index]['has_class_IV'] == '1':
            drivers_with_class_IV += 1

    print("DRIVERS WITH CLASS IV: ", drivers_with_class_IV)
    print("\n")

    trips_needing_class_IV_guide = 0
    if drivers_with_class_IV < num_class_IV_drivers:
        trips_needing_class_IV_guide = num_class_IV_drivers - drivers_with_class_IV

    for trip, value in enumerate(
            create_schedule.schedule_dictionaries.trip_types):
        if trip != 4:
            if (max_guides[trip] <= 4 and max_guides[trip] > 1):
                for role_needed in range(max_guides[trip]):
                    trips_needing_class_IV_guide = create_schedule_role.create_schedule_role(
                        role_needed, current_date, trip_role_assignment, trip,
                        class_IV_needed, trips_needing_class_IV_guide)

            elif (max_guides[trip] == 1):

                trips_needing_class_IV_guide = create_schedule_role.create_schedule_role(
                    0, current_date, trip_role_assignment, trip,
                    class_IV_needed, trips_needing_class_IV_guide)
                trips_needing_class_IV_guide = create_schedule_role.create_schedule_role(
                    4, current_date, trip_role_assignment, trip,
                    class_IV_needed, trips_needing_class_IV_guide)

            for role_needed in range(max_drivers[trip]):
                trips_needing_class_IV_guide = create_schedule_role.create_schedule_role(
                    role_needed + 5, current_date, trip_role_assignment, trip,
                    class_IV_needed, trips_needing_class_IV_guide)
    print("\n")
    print("CLASS IV NEEDED: ", class_IV_needed)
    print("\n")
    create_schedule.copy_schedule_role.copy_schedule_role(
        session_guide, session_driver, session_schedule, trips,
        trip_role_assignment, num_drivers, num_safety, num_clients, num_guides,
        max_guides, max_drivers, current_date_object, current_date)

    if temp_guide != 0:

        temp_guide_object = session_guide.query(
            manage_staff.guide.guide).filter(
                manage_staff.guide.guide.name.in_([temp_guide])).update(
                    {
                        'in_stream': 'false',
                        'tl_this_summer_four_hour': 0,
                        'tl_this_summer_c_wave': 0,
                        'tl_this_summer_full_day': 0,
                        'tl_this_summer_scenic_float': 0,
                        'tl_this_summer_overnight': 0,
                        'tl_this_period_four_hour': 0,
                        'tl_this_period_c_wave': 0,
                        'tl_this_period_full_day': 0,
                        'tl_this_period_scenic_float': 0,
                        'tl_this_period_overnight': 0,
                        'guided_this_summer_four_hour': 0,
                        'guided_this_summer_c_wave': 0,
                        'guided_this_summer_full_day': 0,
                        'guided_this_summer_scenic_float': 0,
                        'guided_this_summer_overnight': 0,
                        'guided_this_period_four_hour': 0,
                        'guided_this_period_c_wave': 0,
                        'guided_this_period_full_day': 0,
                        'guided_this_period_scenic_float': 0,
                        'guided_this_period_overnight': 0,
                        'safety_this_summer_four_hour': 0,
                        'safety_this_summer_c_wave': 0,
                        'safety_this_summer_full_day': 0,
                        'safety_this_summer_scenic_float': 0,
                        'safety_this_summer_overnight': 0,
                        'safety_this_period_four_hour': 0,
                        'safety_this_period_c_wave': 0,
                        'safety_this_period_full_day': 0,
                        'safety_this_period_scenic_float': 0,
                        'safety_this_period_overnight': 0
                    },
                    synchronize_session=False)

        session_guide.commit()
        print("\n")
        print(
            "TEMP GUIDE INSTREAM RETURNED TO FALSE: ",
            session_guide.query(manage_staff.guide.guide).filter(
                manage_staff.guide.guide.name.in_([temp_guide])))
        print("\n")

    if temp_driver != 0:

        temp_driver_object = session_driver.query(
            manage_staff.driver.driver).filter(
                manage_staff.driver.driver.name.in_([temp_driver])).update(
                    {
                        'in_stream': 'false',
                        'driven_this_summer_four_hour': 0,
                        'driven_this_summer_c_wave': 0,
                        'driven_this_summer_full_day': 0,
                        'driven_this_summer_scenic_float': 0,
                        'driven_this_summer_overnight': 0,
                        'driven_this_period_four_hour': 0,
                        'driven_this_period_c_wave': 0,
                        'driven_this_period_full_day': 0,
                        'driven_this_period_scenic_float': 0,
                        'driven_this_period_overnight': 0
                    },
                    synchronize_session=False)

        session_driver.commit()
        print("\n")
        print(
            "TEMP GUIDE INSTREAM RETURNED TO FALSE: ",
            session_driver.query(manage_staff.driver.driver).filter(
                manage_staff.driver.driver.name.in_([temp_driver])))
        print("\n")
Пример #2
0
 def showAbout(self):
     """opens the about window"""
     self.dia = QtWidgets.QDialog()
     self.ui = about.Ui_Form()
     self.ui.setupUi(self.dia)
     self.dia.show()
Пример #3
0
class SDAnimate():
	# Initial variables and attributes
	parameter_value   = 0
	step_value        = 0.1
	sprites_number    = 1
	parameter_index   = 0
	folder_path       = None
	file_type         = '\*.png'
	file_prefix       = ""

	# Get the application and the UI Manager.
	app   = sd.getContext().getSDApplication()
	uiMgr = app.getQtForPythonUIMgr()

	# Create a new dialog. For shortcuts to work correctly
	mainWindow = uiMgr.getMainWindow()
	dialog     = QtWidgets.QDialog(parent=mainWindow)
	dialog.setWindowTitle("SDAnimate v1.0 - by Shady Tantawy")
	dialog.setFixedSize(QtCore.QSize(400, 300))

	# Get the current graph and the selected node
	current_graph  = uiMgr.getCurrentGraph()

	# Getting the graph properties (Exposed parameters)
	input_section = SDPropertyCategory.Input
	props         = current_graph.getProperties(input_section)
	prop          = props[parameter_index]

	props_labels = []
	for p in props:
		props_labels.append(p.getLabel())


	# Create a layout
	layout = QtWidgets.QVBoxLayout()
	margin_value = 30
	layout.setContentsMargins(margin_value,margin_value,margin_value,margin_value)


	# Labels (lbl)
	lbl_exposed_parameters = QtWidgets.QLabel("Parameter (must be exposed)")
	lbl_step_value         = QtWidgets.QLabel("Step Value")
	lbl_sprites_number     = QtWidgets.QLabel("Sprites Number")
	lbl_file_prefix        = QtWidgets.QLabel("File Prefix")
	lbl_folder_path        = QtWidgets.QLabel("")

	lbl_exposed_parameters.setFont(QFont("Times", 10, QFont.Bold))
	lbl_step_value.setFont(QFont("Times", 10, QFont.Bold))
	lbl_sprites_number.setFont(QFont("Times", 10, QFont.Bold))
	lbl_file_prefix.setFont(QFont("Times", 10, QFont.Bold))

	# Buttons (btn)
	btn_generate_flipbook = QtWidgets.QPushButton("Generate")
	btn_browse_folder     = QtWidgets.QPushButton("Browse Folder")

	btn_generate_flipbook.setStyleSheet("background-color : green")

	# Drop down menus (ddm)
	ddm_exposed_parameters = QtWidgets.QComboBox()
	
	ddm_exposed_parameters.addItems(props_labels)
	

	# Spin Box (sb)
	sb_step_value = QtWidgets.QDoubleSpinBox()
	sb_step_value.setSingleStep(0.1)
	sb_step_value.setMinimum(0.1)
	sb_step_value.setMaximum(1)

	sb_sprites_number = QtWidgets.QSpinBox()
	sb_sprites_number.setSingleStep(1)
	sb_sprites_number.setMinimum(1)
	sb_sprites_number.setMaximum(16)

	# Line Edit (le)
	le_file_prefix = QtWidgets.QLineEdit()
	le_file_prefix.setPlaceholderText("Default: " + "[index].png")
	le_file_prefix.setMaxLength(20)

	# Add widgets to layout
	layout.addWidget(lbl_exposed_parameters)
	layout.addWidget(ddm_exposed_parameters)
	layout.addWidget(lbl_step_value)
	layout.addWidget(sb_step_value)
	layout.addWidget(lbl_sprites_number)
	layout.addWidget(sb_sprites_number)
	layout.addWidget(lbl_file_prefix)
	layout.addWidget(le_file_prefix)
	layout.addWidget(btn_browse_folder)
	layout.addWidget(lbl_folder_path)
	layout.addWidget(btn_generate_flipbook)
	dialog.setLayout(layout)
	
	def __init__(self):
		# Actions (Widgets)
		self.btn_generate_flipbook.clicked.connect(self.on_btn_generate_flipbook)
		self.btn_browse_folder.clicked.connect(self.on_btn_browse_folder)
		self.ddm_exposed_parameters.currentIndexChanged.connect(self.on_ddm_exposed_parameters_index_change)
		self.sb_step_value.valueChanged.connect(self.on_sb_step_value_change)
		self.sb_sprites_number.valueChanged.connect(self.on_sb_sprites_number_change)
		self.le_file_prefix.textChanged.connect(self.on_le_file_prefix_change)
	

	# Functions
	@classmethod
	def on_btn_generate_flipbook(self):
		print("Generating images...")
		if not self.folder_path:
			self.lbl_folder_path.setText("You must select a folder!")
			print("You must select a folder!")
			return

		for x in range(sprites_number):
			export.exportSDGraphOutputs(self.current_graph, self.folder_path, str(x) + ".png")
			self.current_graph.setPropertyValue(self.prop, SDValueFloat.sNew(self.parameter_value))
			self.parameter_value += self.step_value

			# File Naming
			files               = glob.glob(self.folder_path + self.file_type)
			newest_file_created = max(files, key=os.path.getctime)
			new_file_name       = self.file_prefix + str(x) + ".png"
			os.rename(newest_file_created, os.path.join(self.folder_path, new_file_name))


	@classmethod
	def on_btn_browse_folder(self):
		f = str(QtWidgets.QFileDialog.getExistingDirectory())
		self.folder_path = f
		self.lbl_folder_path.setText(f)
		print(f)


	@classmethod
	def on_ddm_exposed_parameters_index_change(self, i):
		self.parameter_index = i
		self.prop = self.props[i]
		print("[Parameter Selected]" + '\n' 
		+ "Label: " + self.prop.getLabel() + '\n'
		+ "ID: " + self.prop.getId() + '\n'
		+ "Index: " + str(i))
		

	@classmethod
	def on_sb_step_value_change(self, i):
		global step_value
		x = round(i, 1)
		step_value = x

	@classmethod
	def on_sb_sprites_number_change(self, i):
		global sprites_number
		sprites_number = i

	@classmethod
	def on_le_file_prefix_change(self, s):
		self.file_prefix = s
Пример #4
0
        self.textBrowser.setObjectName("textBrowser")

        self.retranslateUi(about)
        QtCore.QMetaObject.connectSlotsByName(about)

    def retranslateUi(self, about):
        _translate = QtCore.QCoreApplication.translate
        about.setWindowTitle(_translate("about", "Dialog"))
        self.textBrowser.setHtml(
            _translate(
                "about",
                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
                "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
                "p, li { white-space: pre-wrap; }\n"
                "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Vasp Studio </p>\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">v0.2</p>\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">author: WANG Baochuan</p>\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">github: https://github.com/B-C-WANG</p></body></html>"
            ))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    about = QtWidgets.QDialog()
    ui = Ui_about()
    ui.setupUi(about)
    about.show()
    sys.exit(app.exec_())
Пример #5
0
    def showAboutDialog(self):
        self.about = QtWidgets.QDialog()
        self.about.setMinimumSize(700, 318)
        self.about.setMaximumSize(700, 318)
        self.about.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
                
        #defines a function, 'closeAboutDialog,' that will close the 'self.about' widget when called
        def closeAboutDialog(*args, **kwargs):
            self.about.close()        
        #when the 'mousePressEvent' is triggered, call the function 'closeAboutDialog'
        self.about.mousePressEvent = closeAboutDialog
        
        #--- BEGIN IMAGE PREPARATION ---#
        #stores images as base64 encoded strings so that the images may be self contained within the script
        mfxLogo256w_encoded = "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"
        toolTitle256w_encoded = "iVBORw0KGgoAAAANSUhEUgAAAQkAAAAWCAYAAADTn2meAAAACXBIWXMAAAsSAAALEgHS3X78AAAE7UlEQVR4nO1crXfbMBC/fZBB00LTQg8OunAwhYMe3JgLC9s/ofkTEjoW07GaliV0bKZl2vPb3es9TbKlkxJn2/3e05vjWJf70unu5PWVMQYUCoXCh9eqGYVCMQUNEgqFYhIaJBQKxSTeAkADAJXjoQEA1gBwSFDhBuffCOZWyJsPPfI3hwIA7tgza5zru78ESssOPep/K9D/SGeF1+Pc+0gaxMdg2c3W1w0+M4UWZQPLXrasIXb0+Skhxn45fT6Xn4KlLxdCdA4OW0n5+Q1jTGGMac1vVMaYEkdjjPlpjKnH5qZgVDh/L5w/8rRBXirkr8XP9F0oLT6f36899085RnkeUd/0uyvUXSPQ2Q5pEp1H9jlkcH+w9VJa9OdGgc/v8ZqeH68fUL5CwBf30wp9IcYffLTuUO/VQn5a4PN7xlOJfrqP9NMS5zw46MTwBHTRoHC28VtUWqgh7bmPHrohY8OMVSIdvmh2kQqz50/dP+V4REO69Oe67xsU8OygvonUFfnD3mP7WFo+H9oJ/MrnpxJ6Plr7SBlz+imgzV0baxm7uFmQsO3h8hPvmOtJDJi6TKV5PlQsrZHM72fSx7iU6TzRWnpKka/FNLmz7o+fa4ENeGmQAirtakaDUuqQ1DkU15nodTMpv41T+elo288Z6Gzx32AZQxuXEuWXrL6TBIn7me+3M9//DahRPy4nGyKcggK5HSCA3asd302BeiIt0peC+ivcKWsPrxKskL9cAaeK7Emcwk8pUOeQkdZisIxzQaIKiJS+ecREJ3DQ/wVlpmZpEbCQY3ZHAi2AlGxiQBm5D/gCmgSrxCDGUaOezm0DWgU8E0Orj9H/W+tzgUoqkFgtTHFq5vz9EaK9FCthVnMMlDhyLRbw7A6HhBOqA8smJCcthI5lJAPbfKR4YPNq4ekZocV/KdDenEEpO/Kxs/iSomL6KtGG1zG07CDBd4zRiO+FC7tiu1DHatKlI3Rn8VBkqLn/ddxjcG0TauKelURD4rE6IB9EY5NIa80W5fWZZBGjjq7wukiUsUcb3iGtaBvaQSL2TN0FcgZ+Tku7x9IGsB1UkoLn5GXImCqDR54yUU5616INqL996JkPQObsqUvMUAeWfjdnWGoMGfR1wGC4k/SDjvHGJaWSV2xoX+JPDNbCcSE0gAwBCyUl+FP63c485wPvS+Su+deZytgt2mLJjcMHaXDm6FjpH4VjBgmOnvU6FC/YTtSchVV7T4F2G1fA4W82SjGwskNqw44twmP0pqrEfhMFrpxNwtxoEtfQVmLDYwQJVzrjOitXvDimqy/SRjbQ7nEB2guF7JGashIvUiclHzjWq+/SLIdAr2SnHvkeC3SYkBJgRe++UJDIpRTenOKgVHfpIGHLubQz9Kzeb1j/4E5Qi3JaJBed5sQ2q1x6GRLT3j5Dfe3ii/SVemICrMm+ZDbhkpFOKFL7hYOk5Hhze3s7LtxLAHgCgAsA+JEQrW5RkEvLGRom4HOksDUKNfL3TvhuQWP95gHpfGJ0Dwsd0X7H3x55+QIAH9mCl9Aq0A6f8Pqr4D94XTBn5XOf2O/E4hmf/8auY2D76QccH9F+2wi/oDdQn5DmgTW1n5G+LXsIzRx+WrA1RDLWyNca12cIWubPF4wX0t9lqB31L1MpFIpJ6N+TUCgUk9AgoVAoJqFBQqFQ+AEAvwDkKpNN+CldLQAAAABJRU5ErkJggg=="
        #'base64.decodestring()' is a method used to decode a base64 encoded string
        mfxLogo_decoded = base64.decodestring(mfxLogo256w_encoded)
        toolTitle_decoded = base64.decodestring(toolTitle256w_encoded)
        #'QtGui.QPixmap()' is an object for containing image representations
        pixMap_logo = QtGui.QPixmap()
        pixMap_title = QtGui.QPixmap()
        #'loadFromData' is a function within the 'QtGui.QPixmap' object that loads an image that was encoded as a base64 string
        pixMap_logo.loadFromData(mfxLogo_decoded)
        pixMap_title.loadFromData(toolTitle_decoded)
        #--- END IMAGE PREPARATION ---#
        
        #creates a 'QtWidgets.QLabel' object and assigns a given 'QtGui.QPixmap()' object to it using the 'QtGui.setPixmap()' method
        img_mfxLogo = QtWidgets.QLabel()
        img_toolTitle = QtWidgets.QLabel()
        img_mfxLogo.setPixmap(pixMap_logo)
        img_toolTitle.setPixmap(pixMap_title)
        
        #creates a 'QtWidgets.QLabel()' object that stores this tool's version number and calendar year
        txt_versionNum = QtWidgets.QLabel()
        txt_versionNum.setText('Version 1.0 (2018)')
        
        #creates a 'QtWidgets.QPlainTextEdit' object and sets it's 'readOnly()' method to 'true' for displaying typical disclaimer text
        txt_disclaimer = QtWidgets.QPlainTextEdit('This is a free tool for simultaneously adjusting the directories of multiple Read and Write Nodes within Nuke, and was made by Eric A. Mercado.\n\nThis tool was written using Python 2.7.xx, and Qt for Python (PySide), as to align with the software trends described by www.vfxplatform.com/.\n\nPlease feel free to contact me with any issues, comments, or concerns and I will address them as soon as I can.\n\nThank you.')
        txt_disclaimer.setReadOnly(1)

        #creates 'QtWidgets.QLabel()' objects and arranges them into a 'QtWidgets.QHBoxLayout()' object for simplfied grouping
        txt_email = QtWidgets.QLabel()
        txt_email.setText('*****@*****.**')
        txt_phone = QtWidgets.QLabel()
        txt_phone.setText('(816) 786-4189')
        contactLayout = QtWidgets.QVBoxLayout()
        contactLayout.addWidget(txt_email)
        contactLayout.addWidget(txt_phone)
        
        leftSide = QtWidgets.QVBoxLayout()
        leftSide.addWidget(img_mfxLogo)
        rightSide = QtWidgets.QVBoxLayout()
        rightSide.addWidget(img_toolTitle)
        rightSide.addWidget(txt_versionNum)
        rightSide.addWidget(txt_disclaimer)
        rightSide.addLayout(contactLayout)
        
        #----------------------------------------------------------------------#
        #--- BEGIN STYLING for 'self.about', a 'QtWidgets.QDialog()' object ---#
        #----------------------------------------------------------------------#
        #initializes the 'pixMap_BG' object that will serve has a containing widget for the generated 'painter' background
        pixMap_BG = QtGui.QPixmap(700, 318)
        pixMap_BG.fill(QtGui.QColor(0, 0, 0, 255))

        #creates the 'QtGui.QPainter()' object, and begins the painting operations
        BG_painter = QtGui.QPainter(self.about)
        BG_painter.begin(pixMap_BG)

        #initializes a 'QtCore.QRectF()' object that will serve has the basic shape for the background.  In this case, it should be the same size as the 'QtWidgets.Dialog()' object
        rectangle = QtCore.QRectF(0, 0, 700, 318)

        #--- BEGIN LAYER 01 ---#
        solid_brush = QtGui.QBrush(QtGui.QColor(36, 36, 36, 255), QtCore.Qt.SolidPattern)
        BG_painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver)        
        BG_painter.setBrush(solid_brush)
        BG_painter.drawRect(rectangle)
        #---- END LAYER 01 ----#
        #--- BEGIN LAYER 02 ---#
        stripes_brush = QtGui.QBrush(QtGui.QColor(50, 50, 50, 255), QtCore.Qt.BDiagPattern)
        BG_painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver) 
        BG_painter.setBrush(stripes_brush)
        BG_painter.drawRect(rectangle)
        #---- END LAYER 02 ----#
        #--- BEGIN LAYER 03 ---#
        gradient_style = QtGui.QLinearGradient(0, 0, 0, rectangle.height()) #QtGui.QLinearGradient(startX, startY, endX, endY)
        gradient_style.setColorAt(0.80, QtGui.QColor(255, 255, 255, 255)) #QtGui.QLinearGradient().setColorAt(positionFloat, color)
        gradient_style.setColorAt(1.00, QtGui.QColor(128, 128, 128, 255)) #QtGui.QLinearGradient().setColorAt(positionFloat, color)
        BG_painter.setCompositionMode(QtGui.QPainter.CompositionMode_Multiply)
        gradient_brush = QtGui.QBrush(gradient_style)
        BG_painter.setBrush(gradient_brush)
        BG_painter.drawRect(rectangle)
        #---- END LAYER 03 ----#

        #'BG_painter.end()' ends the painting instance
        BG_painter.end()

        #converts the 'QtGui.QPixMap()' object into a 'QtGui.QImage' object
        BG_converted = pixMap_BG.toImage()
        #creates a 'QtGui.QBrush()' object that uses 'BG_converted' as a 'QtCore.Qt.TexturePattern'
        palette_brush = QtGui.QBrush(QtCore.Qt.TexturePattern)
        palette_brush.setTextureImage(BG_converted)
        #creates a new 'QtGui.QPalette()' object, with the previously created 'palette_brush' object to fill the 'QtGui.QPalette.Background' color role
        dialogPalette = QtGui.QPalette()
        dialogPalette.setBrush(QtGui.QPalette.Background, palette_brush)
        #applies the newly created 'dialogPalette' to the 'self.about' dialog object 
        self.about.setPalette(dialogPalette)
        #----------------------------------------------------------------------#
        #---- END STYLING for 'self.about', a 'QtWidgets.QDialog()' object ----#
        #----------------------------------------------------------------------#

        dialogLayout_about = QtWidgets.QHBoxLayout()
        dialogLayout_about.addLayout(leftSide)
        dialogLayout_about.addLayout(rightSide)

        self.about.setLayout(dialogLayout_about)
        self.about.exec_()        
Пример #6
0
def create_grid_gui(app):
    active_region = active_screen_region(app)
    active_win = WinData.active_window_id()

    window = QtWidgets.QDialog()

    # set window flagsfsdf
    window.setWindowFlags(QtCore.Qt.FramelessWindowHint |
                          QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.Tool |
                          QtCore.Qt.X11BypassWindowManagerHint)

    # set window properties
    window.setFixedSize(290, 320)
    window.setStyleSheet('background-color: rgb(%s, %s, %s)' %
                         (FRAME_COLOR.red(), FRAME_COLOR.green(), FRAME_COLOR.blue()))
    window.setWindowOpacity(0.95)

    # set window layout
    layout = QtWidgets.QGridLayout(window)

    # add Q button
    up_left = create_button('↖', GRID_BG_COLOR, LEGEND_COLOR)
    up_left.setFixedWidth(25)
    up_left.setFixedHeight(25)
    layout.addWidget(up_left, 0, 0)

    # add W/Up button
    up = create_button('↑', GRID_BG_COLOR, LEGEND_COLOR)
    up.setFixedHeight(25)
    layout.addWidget(up, 0, 1)

    # add E button
    up_right = create_button('↗', GRID_BG_COLOR, LEGEND_COLOR)
    up_right.setFixedWidth(25)
    up_right.setFixedHeight(25)
    layout.addWidget(up_right, 0, 2)

    # create grid component
    grid = QtWidgets.QFrame()
    grid.setFixedSize(200, 200)
    grid.setStyleSheet('background-color: rgb(%s, %s, %s)' %
                       (GRID_BG_COLOR.red(), GRID_BG_COLOR.green(), GRID_BG_COLOR.blue()))

    # setup drag bounds
    drag = QtCore.QRect(-1, -1, -1, -1)

    # create grid drawer
    def override_paint_event(evt):
        # create the painter
        painter = QtGui.QPainter(grid)
        # create the grid callback

        def grid_callback(rect):
            painter.setPen(QtGui.QPen(GRID_COLOR))
            painter.drawRect(rect)
            if rect.intersects(drag):
                painter.fillRect(rect, REGION_COLOR)

        # draw the grid
        do_grid(grid, grid_callback)

        # draw axis
        painter.setPen(QtGui.QPen(AXIS_COLOR))
        painter.drawLine(grid.width() / 2, 0, grid.width() / 2, grid.height())
        painter.drawLine(0, grid.height() / 2, grid.width(), grid.height() / 2)
    grid.paintEvent = override_paint_event

    initial = QtCore.QPoint(-1, -1)

    # create grid drag listeners
    def override_mouse_press_event(evt):
        initial.setX(evt.pos().x())
        initial.setY(evt.pos().y())

    def override_mouse_move_event(evt):
        drag.setWidth(abs(evt.pos().x() - initial.x()))
        drag.setHeight(abs(evt.pos().y() - initial.y()))
        drag.setX(min(evt.pos().x(), initial.x()))
        drag.setY(min(evt.pos().y(), initial.y()))
        grid.repaint()

    def override_mouse_release_event(evt):
        size_and_hide(window, grid, active_region, active_win, drag)
    grid.mousePressEvent = override_mouse_press_event
    grid.mouseMoveEvent = override_mouse_move_event
    grid.mouseReleaseEvent = override_mouse_release_event

    # add A/Left button
    left = create_button('←', GRID_BG_COLOR, LEGEND_COLOR)
    left.setFixedWidth(25)
    left.setFixedHeight(grid.height())
    layout.addWidget(left, 1, 0)

    # add grid
    layout.addWidget(grid, 1, 1)

    # add D/Right button
    right = create_button('→', GRID_BG_COLOR, LEGEND_COLOR)
    right.setFixedWidth(25)
    right.setFixedHeight(grid.height())
    layout.addWidget(right, 1, 2)

    # add Z button
    bot_left = create_button('↙', GRID_BG_COLOR, LEGEND_COLOR)
    bot_left.setFixedWidth(25)
    bot_left.setFixedHeight(25)
    layout.addWidget(bot_left, 2, 0)

    # add S/Down button
    down = create_button('↓', GRID_BG_COLOR, LEGEND_COLOR)
    down.setFixedHeight(25)
    layout.addWidget(down, 2, 1)

    # add C button
    bot_right = create_button('↘', GRID_BG_COLOR, LEGEND_COLOR)
    bot_right.setFixedWidth(25)
    bot_right.setFixedHeight(25)
    layout.addWidget(bot_right, 2, 2)

    # add export button
    export = create_button('EXPORT', GRID_BG_COLOR, LEGEND_COLOR)
    export.setFixedHeight(25)
    layout.addWidget(export, 3, 0, 1, 3)

    # grab focus upon showing
    def override_show_event(evt):
        window.raise_()
        window.activateWindow()
        window.setFocus()
    window.showEvent = override_show_event

    # exit the program upon hiding
    def override_close_event(evt):
        window.hide()
        app.exit()  # close the program since it is a one-run type of program
    window.closeEvent = override_close_event

    # add mouse press events
    up_left.clicked.connect(lambda: snap_nw(
        window, grid, active_region, active_win, drag))
    up.clicked.connect(lambda: snap_top_50(
        window, grid, active_region, active_win, drag))
    up_right.clicked.connect(lambda: snap_ne(
        window, grid, active_region, active_win, drag))
    left.clicked.connect(lambda: snap_left_50(
        window, grid, active_region, active_win, drag))
    right.clicked.connect(lambda: snap_right_50(
        window, grid, active_region, active_win, drag))
    bot_left.clicked.connect(lambda: snap_sw(
        window, grid, active_region, active_win, drag))
    down.clicked.connect(lambda: snap_bot_50(
        window, grid, active_region, active_win, drag))
    bot_right.clicked.connect(lambda: snap_se(
        window, grid, active_region, active_win, drag))
    export.clicked.connect(lambda: export_config(app, window))

    # add key press events
    def override_key_press_event(evt):
        if evt.key() == QtCore.Qt.Key_Escape:
            window.close()
        elif evt.key() == QtCore.Qt.Key_Q:
            snap_nw(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_E:
            snap_ne(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_Z:
            snap_sw(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_C:
            snap_se(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_W or evt.key() == QtCore.Qt.Key_Up:
            snap_top_50(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_A or evt.key() == QtCore.Qt.Key_Left:
            snap_left_50(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_S or evt.key() == QtCore.Qt.Key_Down:
            snap_bot_50(window, grid, active_region, active_win, drag)
        elif evt.key() == QtCore.Qt.Key_D or evt.key() == QtCore.Qt.Key_Right:
            snap_right_50(window, grid, active_region, active_win, drag)

    window.keyPressEvent = override_key_press_event

    # center the window and show it
    mid_x = (active_region.topLeft().x() +
             (active_region.width() / 2)) - (window.width() / 2)
    mid_y = (active_region.height() / 2) - (window.height() / 2)

    window.move(mid_x, mid_y)
    window.show()

    return window
Пример #7
0
def OpenRegistForm():
    global Dialog
    Dialog = QtWidgets.QDialog()
    ui = Ui_Registration()
    ui.setupUi(Dialog)
    Dialog.show()
Пример #8
0
    def import_fct(self):
        """main fonction

        it'll copy, import, rename and set correctly all the file in nuke
        """
        self.progressWindow = QtWidgets.QDialog()

        self.progress = QtWidgets.QProgressBar(self)

        layout = QtWidgets.QHBoxLayout(self.progressWindow)
        layout.addWidget(self.progress)

        self.progressWindow.show()

        # define the proxy folder
        proxy_path = 'D:/TEMP_NUKE'
        dic_frame = {}
        path = nuke.root().name()
        path = path.split('/')

        path_directory = self.HD_path

        version = self.version_drop_down.currentText()

        selected = self.path_tree.selectedItems()

        # create proxy folder
        proxy_path = os.path.join(proxy_path, path[-4], path[-3])

        # if the box is check it'will import all pass of a layer or all layer
        if self.checkbox_passes.isChecked():
            child_list = []
            # get layers
            layer = self.pass_drop_down.currentText()
            if layer in self.parentitem:
                layer_sel = self.parentitem[layer]
                layer_sel.setSelected(True)
                count = layer_sel.childCount()
                for i in range(count):
                    child = layer_sel.child(i)
                    child_list.append(child)
                    selected = child_list
            if layer == 'All layers':
                for key, value in self.parentitem.iteritems():
                    value.setSelected(True)
                    count = value.childCount()
                    for i in range(count):
                        child = value.child(i)
                        child_list.append(child)
                        selected = child_list

        # import by selected pass

        for i in selected:
            selected = i.text(0)
            qual = 'HD'
            if self.ld_checkbox.isChecked():
                path_directory = self.LD_path
                qual = 'LD'
            elif self.fml_checkbox.isChecked():
                path_directory = self.FML_path
                qual = 'FML'

            if QtWidgets.QTreeWidgetItem.parent(i):
                pass_type = QtWidgets.QTreeWidgetItem.parent(i)
                pass_type = pass_type.text(0)
                path_path = os.path.abspath(
                    os.path.join(path_directory, version, pass_type))
                all_frame_list = os.listdir(path_path)
                selectedlist = []
                for frame in all_frame_list:
                    name_frame = frame[:-9] + '_'
                    if '_' + selected in name_frame:
                        frame_nbr = frame[-8:]
                        frame_nbr = frame_nbr[:-4]
                        selectedlist.append(int(frame_nbr))
                        selectedlist = sorted(selectedlist)
                        end = selectedlist[-1]
                        first = selectedlist[0]
                        start_end = [first, end]
                        dic_frame = {name_frame: start_end}

                # create the path

                for key, value in dic_frame.items():
                    self.progress.setValue(0)
                    new_path = (os.path.abspath("{}/{}####.exr {}-{}".format(
                        path_path, key, value[0],
                        value[1]))).replace("\\", "/")
                    main_path = (os.path.abspath("{}/{}####.exr".format(
                        path_path, key))).replace("\\", "/")
                    proxy = os.path.join(proxy_path, qual)
                    proxycoucou = proxy
                    new_proxy_path = "{}/{}####.exr {}-{}".format(
                        proxy, key, value[0], value[1])
                    name = pass_type + '_' + selected

                    # if the node already exist just update the path

                    if nuke.exists(name):
                        node = nuke.toNode(name)
                        node.knob('file').fromUserText(
                            os.path.abspath(new_path))
                        if self.checkbox.isChecked():
                            self.progressWindow.setWindowTitle(selected)
                            self.copy_files_with_progress(
                                path_path, proxycoucou, key)
                            node.knob('proxy').fromUserText(
                                os.path.normpath(new_proxy_path))

                    # else create the node

                    else:
                        print(new_path)
                        readNode = nuke.nodes.Read(file=main_path,
                                                   first=value[0],
                                                   last=value[1],
                                                   name=name)
                        node = nuke.toNode(name)
                        if self.checkbox.isChecked():
                            self.progressWindow.setWindowTitle(selected)
                            self.copy_files_with_progress(
                                path_path, proxycoucou, key)
                            # self.progressWindow.close()
                            node.knob('proxy').fromUserText(
                                os.path.normpath(new_proxy_path))
        self.progressWindow.close()

        # auto create Deep EXRID network

        if nuke.exists('ALL_ALL_ExrID'):

            value = nuke.toNode('ALL_ALL_ExrID').knob('file').getValue()
            value = value.replace('%04d', '####')

            first = nuke.toNode('ALL_ALL_ExrID').knob('first').getValue()
            last = nuke.toNode('ALL_ALL_ExrID').knob('last').getValue()

            value = value + ' {}-{}'.format(int(first), int(last))

            infopath = nuke.root().name()

            infopath = infopath.split('/')

            nodename = infopath[-4] + '_' + infopath[-3] + '_DeepRead'

            if nuke.exists(nodename):
                print('exist')
                my_node = nuke.toNode(nodename)

            else:
                my_node = nuke.createNode('DeepRead')
                my_node.setName(nodename)
                my_node.knob('on_error').setValue(3)

            my_node.knob('file').fromUserText(value)

            open_exrid = nodename.replace('DeepRead', 'OpenEXRId')
            if nuke.exists(open_exrid):
                print('exist')
                key = nuke.toNode(open_exrid)

            else:
                key = nuke.createNode('DeepOpenEXRId')
                key.setName(open_exrid)

            key.setInput(0, my_node)

            deeptoimage = nodename.replace('DeepRead', 'DeepToImage')
            if nuke.exists(deeptoimage):
                print('exist')
                value = nuke.toNode(deeptoimage)

            else:
                value = nuke.createNode('DeepToImage')
                value.setName(deeptoimage)

            value.setInput(0, key)

            exr_pass = nuke.toNode('ALL_ALL_ExrID')
            nuke.delete(exr_pass)
Пример #9
0
def start():

    # UI
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()

    vt = VirusTotal()
    parser = argparse.ArgumentParser(description='Virustotal File Scan')
    parser.add_argument("-p",
                        "--private",
                        help="the API key belongs to a private API service",
                        action="store_true")
    parser.add_argument("-v",
                        "--verbose",
                        help="print verbose log (everything in response)",
                        action="store_true")
    parser.add_argument("-s",
                        "--send",
                        help="send a file or a directory of files to scan",
                        metavar="PATH")
    parser.add_argument(
        "-r",
        "--retrieve",
        help="retrieve reports on a file or a directory of files",
        metavar="PATH")
    parser.add_argument(
        "-m",
        "--retrievefrommeta",
        help=
        "retrieve reports based on checksums in a metafile (one sha256 checksum for each line)",
        metavar="METAFILE")
    parser.add_argument("-l",
                        "--log",
                        help="log actions and responses in file",
                        metavar="LOGFILE")
    args = parser.parse_args()
    vt.send_files(["C:\\Users\\Alex\\Downloads\\SpyMAX\\Spy MAX.exe"])
    if args.log:
        filelog = logging.FileHandler(args.log)
        filelog.setFormatter(
            logging.Formatter("[%(asctime)s %(levelname)s] %(message)s",
                              datefmt="%m/%d/%Y %I:%M:%S"))
        vt.logger.addHandler(filelog)

    if args.private:
        vt.is_public_api = False

    if args.verbose:
        vt.is_verboselog = True

    # system init end, start to perform operations
    api_comments = {True: 'Public', False: 'Private'}
    vt.logger.info("API KEY loaded. %s API used.",
                   api_comments[vt.is_public_api])

    if args.send:
        vt.send_files(list_all_files(args.send))

    if args.retrieve:
        vt.retrieve_files_reports(list_all_files(args.retrieve))

    if args.retrievefrommeta:
        vt.retrieve_from_meta(args.retrievefrommeta)
    def __init__(self):
        self.transfer_function = None
        """
        Create the CopyDeformerWeights UI
        """
        self.dialog = QtWidgets.QDialog()
        self.dialog_name = "copy_deformer_weights_dialog"
        self.delete_instances()

        self.maya_main_window_ptr = OpenMayaUI.MQtUtil.mainWindow()
        self.maya_main_window = wrapInstance(long(self.maya_main_window_ptr),
                                             QtWidgets.QMainWindow)
        self.dialog.setParent(self.maya_main_window)
        self.dialog.setWindowFlags(QtCore.Qt.Window)

        self.dialog.setObjectName(self.dialog_name)
        self.dialog.setFixedSize(400, 500)
        self.dialog.setWindowTitle("Copy Deformer Weights")

        self.dialog_layout = QtWidgets.QGridLayout(self.dialog)
        self.dialog_layout.setObjectName("dialog_layout")

        self.main_layout = QtWidgets.QVBoxLayout()
        self.main_layout.setObjectName("main_layout")

        self.source_group_box = QtWidgets.QGroupBox(self.dialog)
        self.source_group_box.setObjectName("source_group_box")
        self.source_group_box.setTitle("Source")

        self.source_gb_layout = QtWidgets.QGridLayout(self.source_group_box)
        self.source_gb_layout.setObjectName("source_gb_layout")

        self.source_layout = QtWidgets.QVBoxLayout()
        self.source_layout.setObjectName("source_layout")

        self.btn_source = QtWidgets.QPushButton(self.source_group_box)
        self.btn_source.setObjectName("btn_source")
        self.btn_source.setText("Get Source")
        self.btn_source.clicked.connect(lambda: self.get_source_items())
        self.source_layout.addWidget(self.btn_source)

        self.source_list_layout = QtWidgets.QHBoxLayout()
        self.source_list_layout.setObjectName("source_list_layout")

        self.object_source_list = QtWidgets.QListWidget(self.source_group_box)
        self.object_source_list.setObjectName("object_source_list")
        self.object_source_list.currentItemChanged.connect(
            lambda: self.update_source_deformer_list())
        self.source_list_layout.addWidget(self.object_source_list)

        self.deformer_source_list = QtWidgets.QListWidget(
            self.source_group_box)
        self.deformer_source_list.setObjectName("deformer_source_list")
        self.source_list_layout.addWidget(self.deformer_source_list)

        self.source_layout.addLayout(self.source_list_layout)
        self.source_gb_layout.addLayout(self.source_layout, 0, 0, 1, 1)

        self.main_layout.addWidget(self.source_group_box)

        self.target_group_box = QtWidgets.QGroupBox(self.dialog)
        self.target_group_box.setObjectName("target_group_box")
        self.target_group_box.setTitle("Target")

        self.target_gb_layout = QtWidgets.QGridLayout(self.target_group_box)
        self.target_gb_layout.setObjectName("target_gb_layout")

        self.target_layout = QtWidgets.QVBoxLayout()
        self.target_layout.setObjectName("target_layout")

        self.btn_target = QtWidgets.QPushButton(self.target_group_box)
        self.btn_target.setObjectName("btn_target")
        self.btn_target.setText("Get Target")
        self.btn_target.clicked.connect(lambda: self.get_target_items())
        self.target_layout.addWidget(self.btn_target)

        self.target_list_layout = QtWidgets.QHBoxLayout()
        self.target_list_layout.setObjectName("target_list_layout")

        self.object_target_list = QtWidgets.QListWidget(self.target_group_box)
        self.object_target_list.setObjectName("object_target_list")
        self.object_target_list.currentItemChanged.connect(
            lambda: self.update_target_deformer_list())
        self.target_list_layout.addWidget(self.object_target_list)

        self.deformer_target_list = QtWidgets.QListWidget(
            self.target_group_box)
        self.deformer_target_list.setObjectName("deformer_target_list")
        self.target_list_layout.addWidget(self.deformer_target_list)

        self.target_layout.addLayout(self.target_list_layout)
        self.target_gb_layout.addLayout(self.target_layout, 0, 0, 1, 1)
        self.main_layout.addWidget(self.target_group_box)

        self.progress_bar_layout = QtWidgets.QVBoxLayout()
        self.progress_bar_layout.setObjectName("progress_bar_layout")
        self.progress_bar = QtWidgets.QProgressBar(self.dialog)

        self.progress_bar.setProperty("value", -1)
        self.progress_bar.setTextVisible(False)
        self.progress_bar.setObjectName("progress_bar")
        self.progress_bar_layout.addWidget(self.progress_bar)

        self.progress_label = QtWidgets.QLabel(self.dialog)
        self.progress_label.setObjectName("progress_label")
        self.progress_label.setMinimumSize(QtCore.QSize(0, 21))
        self.progress_label.setAlignment(QtCore.Qt.AlignCenter)
        self.progress_bar_layout.addWidget(self.progress_label)
        self.main_layout.addLayout(self.progress_bar_layout)
        self._progress_bar_steps = 8
        self._progress_bar_value = -1

        self.buttons_group_box = QtWidgets.QGroupBox(self.dialog)
        self.buttons_group_box.setTitle("")
        self.buttons_group_box.setObjectName("buttons_group_box")

        self.buttons_gb_layout = QtWidgets.QHBoxLayout(self.buttons_group_box)
        self.buttons_gb_layout.setObjectName("buttons_gb_layout")

        self.copy_button = QtWidgets.QPushButton(self.buttons_group_box)
        self.copy_button.setObjectName("copy_button")
        self.copy_button.setText("Copy")
        self.copy_button.clicked.connect(lambda: self.copy_deformer_weights())
        self.buttons_gb_layout.addWidget(self.copy_button)

        self.cancel_button = QtWidgets.QPushButton(self.buttons_group_box)
        self.cancel_button.setObjectName("cancel_button")
        self.cancel_button.setText("Cancel")
        self.cancel_button.clicked.connect(lambda: self.delete_instances())
        self.buttons_gb_layout.addWidget(self.cancel_button)

        self.main_layout.addWidget(self.buttons_group_box)
        self.dialog_layout.addLayout(self.main_layout, 0, 0, 1, 1)
Пример #11
0
    def __init__(self):
        super().__init__()
        self.msg = QtWidgets.QDialog(
            None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint
            | QtCore.Qt.WindowCloseButtonHint)
        self.msg.setFixedHeight(400)
        self.msg.setFixedWidth(500)

        self.pixmap = QtGui.QPixmap.scaled(QtGui.QPixmap("nasa.ico"), 100, 100)

        self.infotext1 = QtWidgets.QLabel(self.msg)
        self.infotext1.setGeometry(QtCore.QRect(0, 10, 500, 28))
        self.infotext1.setFont(QtGui.QFont("Times", 9))
        self.infotext1.setAlignment(QtCore.Qt.AlignCenter)
        self.infotext1.setText(
            "<b>To add a subreddit use full url to or use ending after reddit.com/r/</b>"
        )

        self.infotext2 = QtWidgets.QLabel(self.msg)
        self.infotext2.setGeometry(QtCore.QRect(0, 30, 500, 28))
        self.infotext2.setText(
            "<b>To add a directory please use full path</b>")
        self.infotext2.setAlignment(QtCore.Qt.AlignCenter)
        self.infotext2.setFont(QtGui.QFont("Times", 9))

        self.infotext3 = QtWidgets.QLabel(self.msg)
        self.infotext3.setGeometry(QtCore.QRect(0, 70, 500, 28))
        self.infotext3.setText("<b>Use enter to confirm path</b>")
        self.infotext3.setAlignment(QtCore.Qt.AlignCenter)
        self.infotext3.setFont(QtGui.QFont("Times", 9))

        self.txtdialog = QtWidgets.QLineEdit(self.msg)
        self.txtdialog.setGeometry(QtCore.QRect(40, 100, 400, 28))
        self.txtdialog.setPlaceholderText("Write url or directory path")
        self.txtdialog.setClearButtonEnabled(True)

        self.horizontalLayoutWidget = QtWidgets.QWidget(self.msg)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(
            40, 120, 400, 200))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(
            self.horizontalLayoutWidget)

        self.previewPic1 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.previewPic1.setFixedWidth(100)
        self.previewPic1.setFixedHeight(100)
        self.previewPic1.setFlat(True)

        self.previewPic2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.previewPic2.setFixedWidth(100)
        self.previewPic2.setFixedHeight(100)
        self.previewPic2.setFlat(True)

        self.horizontalLayout.addWidget(self.previewPic1)
        self.horizontalLayout.addWidget(self.previewPic2)
        self.horizontalLayout.setSpacing(80)

        self.radioButton1 = QtWidgets.QRadioButton(self.msg)
        self.radioButton1.move(128, 280)
        self.radioButton2 = QtWidgets.QRadioButton(self.msg)
        self.radioButton2.move(340, 280)

        self.pushButton3 = QtWidgets.QPushButton(self.msg)
        self.pushButton3.setText("Add to library")
        self.pushButton3.move(200, 350)

        self.pushButton4 = QtWidgets.QPushButton(self.msg)
        self.pushButton4.setText("Cancel")
        self.pushButton4.move(380, 350)

        self.previewPic1.hide()
        self.previewPic2.hide()
        self.radioButton1.hide()
        self.radioButton2.hide()

        self.txtdialog.editingFinished.connect(self.showPreview)
        self.repeater = False
        self.previewPic1.clicked.connect(self.radioButton1.animateClick)
        self.previewPic2.clicked.connect(self.radioButton2.animateClick)
        self.pushButton3.clicked.connect(self.addNew)
        self.pushButton4.clicked.connect(self.msg.reject)

        self.msg.setWindowTitle("Add a subreddit or directory")
        self.msg.setWindowIcon(self.pixmap)

        x = self.msg.exec_()
Пример #12
0
from PySide2 import QtCore, QtGui, QtWidgets
import sys
from ui import Ui_FileTransfer
import shutil
import os

# Creat App
app = QtWidgets.QApplication(sys.argv)

# Create Form
FileTransfer = QtWidgets.QDialog()
ui = Ui_FileTransfer()
ui.setupUi(FileTransfer)
FileTransfer.show()


# Hook Logic
# ------------------------ ALL FUNCTIONS -------------------------
def viewdata1():
    try:
        f1p = []
        f1 = open('data1.txt', 'r')
        for line in f1:
            f1p.append(line)
        ui.lineEdit.setText(f1p[0][0:len(f1p[0]) - 1])
        ui.lineEdit_2.setText(f1p[1][0:len(f1p[1]) - 1])
        ui.lineEdit_3.setText(f1p[2])
        f1.close()
    except:
        print('Empty path 1')
Пример #13
0
 def open_about(self):
     self._about = QtWidgets.QDialog()
     self._ui = about.Ui_AboutDialog()
     self._ui.setupUi(AboutDialog=self._about)
     #self._about.show()
     self._about.exec_()
Пример #14
0
        self.label_3 = QtWidgets.QLabel(Create)
        self.label_3.setGeometry(QtCore.QRect(20, 70, 61, 16))
        self.label_3.setObjectName("label_3")
        self.value = QtWidgets.QLineEdit(Create)
        self.value.setGeometry(QtCore.QRect(80, 70, 271, 20))
        self.value.setReadOnly(False)
        self.value.setObjectName("value")

        self.retranslateUi(Create)
        QtCore.QMetaObject.connectSlotsByName(Create)

    def retranslateUi(self, Create):
        _translate = QtCore.QCoreApplication.translate
        Create.setWindowTitle(_translate("Create", "CreateTextItem"))
        self.label.setText(_translate("Create", "Name"))
        self.ok.setText(_translate("Create", "OK"))
        self.cancle.setText(_translate("Create", "Cancle"))
        self.label_2.setText(_translate("Create", "Key"))
        self.label_3.setText(_translate("Create", "Value"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Create = QtWidgets.QDialog()
    ui = Ui_Create()
    ui.setupUi(Create)
    Create.show()
    sys.exit(app.exec_())

Пример #15
0
                "    <body>\n"
                "        <ol style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n"
                "            <li align=\"justify\"\n"
                "                style=\" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">\n"
                "                Σε περίπτωση που ο κέρσορας στην γραμμή εισαγωγής των voucher <br />βρίσκεται στο μέσο του πεδίου, δεν\n"
                "                θα μπορέσει να εισάγει το <br />σκαναρισμένο barcode. Πιέστε το πλήκτρο Home, ώστε να μπορέσετε <br />να\n"
                "                σκανάρετε. <br /></li>\n"
                "            <li align=\"justify\"\n"
                "                style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">\n"
                "                Το όνομα του αποστολέα γίνεται δεκτό <u>μόνο με ελληνικούς κεφαλαίους</u></li>\n"
                "            <p align=\"justify\">χαρακτήρες και πρέπει να είναι της μορφής:</p>\n"
                "            <p align=\"justify\">Ο. ΕΠΩΝΥΜΟ </p>\n"
                "            <li align=\"justify\"\n"
                "                style=\" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">\n"
                "                Για να γίνει επιτυχώς η αποστολή του e-mail, πρέπει ΟΛΑ τα στοιχεία<br />του πίνακα να είναι\n"
                "                συμπληρωμένα.</li>\n"
                "        </ol>\n"
                "    </body>\n"
                "\n"
                "</html>"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog_Instructions = QtWidgets.QDialog()
    ui = Ui_Dialog_Instructions()
    ui.setupUi(Dialog_Instructions)
    Dialog_Instructions.show()
    sys.exit(app.exec_())
Пример #16
0
            QtWidgets.QApplication.translate("surfacing_Dialog",
                                             "Surfacing_Dialog", None, -1))
        self.depth_label.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog", "depth\n"
                                             "[units]", None, -1))
        self.length_label.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog", "length\n"
                                             "[units]", None, -1))
        self.feed_label.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog", "feed rate\n"
                                             "[units/min]", None, -1))
        self.rpm_label.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog", "rpm", None,
                                             -1))
        self.unit_label.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog", "units", None,
                                             -1))
        self.create_pushButton.setText(
            QtWidgets.QApplication.translate("surfacing_Dialog",
                                             "create gcode", None, -1))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    surfacing_Dialog = QtWidgets.QDialog()
    ui = Ui_surfacing_Dialog()
    ui.setupUi(surfacing_Dialog)
    surfacing_Dialog.show()
    sys.exit(app.exec_())
Пример #17
0
from KenKenGameV3 import Game
import sys
from PySide2 import QtCore, QtWidgets

app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Game()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Пример #18
0
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.buttonBox = QtWidgets.QDialogButtonBox(checking)
        self.buttonBox.setGeometry(QtCore.QRect(100, 140, 193, 28))
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel
                                          | QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")

        self.retranslateUi(checking)
        self.buttonBox.accepted.connect(checking.accept)
        self.buttonBox.rejected.connect(checking.reject)
        QtCore.QMetaObject.connectSlotsByName(checking)

    def retranslateUi(self, checking):
        _translate = QtCore.QCoreApplication.translate
        checking.setWindowTitle(_translate("checking", "checking"))
        self.label_4.setText(
            _translate("checking",
                       "    check the cells of first three columns!!!"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    checking = QtWidgets.QDialog()
    ui = Ui_checking()
    ui.setupUi(checking)
    checking.show()
    sys.exit(app.exec_())