Форум сайта python.su
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from tensorflow import keras from tensorflow.keras import layers # Создание искусственных данных data_size = 10000 np.random.seed(42) # Генерация данных data = { 'ti': np.random.randint(0, 24, data_size), # Вход 1 'te': np.random.uniform(-30, 50, data_size), # Вход 2 'en': np.random.randint(0, 41, data_size), # Вход 3 'tem': np.random.uniform(40, 45, data_size), # Вход 4 'energy_consumption': None # Выход } # Создание DataFrame df = pd.DataFrame(data) # Формирование зависимости: создание искусственных данных для потребления энергии # На основании простого линейного уравнения с добавлением некоторого шума df['energy_consumption'] = ( 50 + 20 * df['ti'] + 15 * df['en'] - 0.5 * df['te '] + 5 * (df['tem'] - 40) + np.random.normal(0, 10, data_size) # добавление случайного шума ) # Разделение данных на признаки и целевую переменную X1 = df[['ti', 'te', 'en', 'tem']] y = df['energy_consumption'] # Разделение данных на обучающую и тестовую выборки X_train, X_test, y_train, y_test = train_test_split(X1, y, test_size=0.2, random_state=42) # Масштабирование признаков scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # Создание модели нейросети model = keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],)), layers.Dense(32, activation='relu'), layers.Dense(1) # Выходной слой, так как мы прогнозируем одно значение ]) # Компиляция модели model.compile(optimizer='adam', loss='mean_squared_error') # Обучение модели model.fit(X_train_scaled, y_train, epochs=100, batch_size=32, validation_split=0.2) # Оценка модели loss = model.evaluate(X_test_scaled, y_test) print(f"Тестовая потеря: {loss:.2f}") # Прогнозирование значений на тестовых данных y_pred = model.predict(X_test_scaled) # Вывод первых 5 прогнозируемых значений print("Первые 5 прогнозируемых значений:") print(y_pred[:5].flatten()) # Пример использования модели для прогноза h=[1, 2, 3, 4, 5, 6, 7, 8, 9,1] t=[10, 20, 30, 40, 30, 30, 20, 20, 20,10] e=[40, 40, 40, 40, 20, 20, 20, 20, 20,40] tg=[45, 45, 45, 45, 45, 45, 45, 45, 45,45] for i in range(10): sample_data = np.array([[h[i], t[i], e[i], tg[i]]]) sample_data_scaled = scaler.transform(sample_data) predicted_consumption = model.predict(sample_data_scaled) print(f"Прогноз =',{h[i]},'te=',{t[i]},' en=',{e[i]},'tem: {predicted_consumption[0][0]:.2f}")
import sqlite3 from aiogram import Bot, Dispatcher, types from aiogram.utils import executor from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.dispatcher import FSMContext from aiogram.contrib.fsm_storage.memory import MemoryStorage API_TOKEN = 'xxxxx' # Замените на свой токен бота bot = Bot(token=API_TOKEN) dp = Dispatcher(bot, storage=MemoryStorage()) # Создание базы данных (если еще не создана) db_name = 'mydatabase.db' conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS data ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT ) ''') conn.commit() conn.close() # Обработчик команды /start @dp.message_handler(commands=['start']) async def start_handler(message: types.Message): await message.answer("Привет! Я бот для поиска информации в базе данных.\n\n" "Введите поисковый запрос:") # Обработчик ввода поискового запроса @dp.message_handler() async def search_handler(message: types.Message): search_term = message.text results = search_data(db_name, search_term) if results: await message.answer("Результаты поиска:") for row in results: await message.answer(f"ID: {row[0]}, Название: {row[1]}, Описание: {row[2]}") else: await message.answer("Ничего не найдено.") # Функция поиска данных в базе данных def search_data(db_name, search_term): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute("SELECT * FROM data WHERE name LIKE ? OR description LIKE ?", ('%' + search_term + '%', '%' + search_term + '%')) results = cursor.fetchall() conn.close() return results if __name__ == "__main__": executor.start_polling(dp, skip_updates=True)
from aiogram.utils import executor ImportError: cannot import name 'executor' from 'aiogram.utils'
from turtle import* from tkinter import* def com(event): event.keysym click =1 def turtlemouv(event): global click click+=1 t.config(text = click) w = Tk() w.geometry('200x130') w.bind("<Key>", turtlemouv) t=Label (w,text="0", font="Arial 35") t.pack() w.mainloop()
from form_main import Ui_MainWindow from PyQt6 import QtWidgets, QtCore from PyQt6.QtWidgets import ( QApplication, QMainWindow, QTableWidgetItem ) import sys import time import threading class Window_main_form(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.potok1) self.pushButton_2.clicked.connect(self.potok2) def Timer(self): st = 0 while True: time.sleep(0.3) win_main_form.lineEdit.setText(str(st)) st += 1 def potok1(self): thread = threading.Thread(target=self.Timer, daemon=True) thread.start() def potok2(self): thread = threading.Thread(target=self.potok2_2, daemon=True) thread.start() def potok2_2(self): self.ListGrease.setColumnCount(2) self.ListGrease.setRowCount(0) self.ListGrease.setHorizontalHeaderLabels(["-", "Дата"]) self.ListGrease.resizeColumnsToContents() self.ListGrease.resizeColumnsToContents() self.ListGrease.setRowCount(self.ListGrease.rowCount() + 1) self.ListGrease.setRowCount(self.ListGrease.rowCount() + 1) self.ListGrease.setItem(0, 1, QTableWidgetItem(str("Текст"))) pushButton = QtWidgets.QPushButton('X') pushButton.setMaximumSize(QtCore.QSize(35, 25)) pushButton.clicked.connect(self.clik) self.ListGrease.setCellWidget(1, 0, QTableWidgetItem(pushButton)) # вот здесь ошибка def clik(self): print("Клик!") if __name__ == '__main__': app = QApplication(sys.argv) win_main_form = Window_main_form() win_main_form.show() sys.exit(app.exec())
current_time = datetime.datetime.now().time() class Graph(object): def __init__(self, nodes, init_graph): self.nodes = nodes self.graph = self.construct_graph(nodes, init_graph) def construct_graph(self, nodes, init_graph): ''' Этот метод обеспечивает симметричность графика. Другими словами, если существует путь от узла A к B со значением V, должен быть путь от узла B к узлу A со значением V. ''' graph = {} for node in nodes: graph[node] = {} graph.update(init_graph) for node, edges in graph.items(): for adjacent_node, value in edges.items(): if graph[adjacent_node].get(node, False) == False: graph[adjacent_node][node] = value return graph def get_nodes(self): "Возвращает узлы графа" return self.nodes def get_outgoing_edges(self, node): "Возвращает соседей узла" connections = [] for out_node in self.nodes: if self.graph[node].get(out_node, False) != False: connections.append(out_node) return connections def value(self, node1, node2): "Возвращает значение ребра между двумя узлами." return self.graph[node1][node2] def dijkstra_algorithm(graph, start_node): unvisited_nodes = list(graph.get_nodes()) # Мы будем использовать этот словарь, чтобы сэкономить на посещении каждого узла и обновлять его по мере продвижения по графику shortest_path = {} # Мы будем использовать этот dict, чтобы сохранить кратчайший известный путь к найденному узлу previous_nodes = {} # Мы будем использовать max_value для инициализации значения "бесконечности" непосещенных узлов max_value = sys.maxsize for node in unvisited_nodes: shortest_path[node] = max_value # Однако мы инициализируем значение начального узла 0 shortest_path[start_node] = 0 # Алгоритм выполняется до тех пор, пока мы не посетим все узлы while unvisited_nodes: # Приведенный ниже блок кода находит узел с наименьшей оценкой current_min_node = None for node in unvisited_nodes: # Iterate over the nodes if current_min_node == None: current_min_node = node elif shortest_path[node] < shortest_path[current_min_node]: current_min_node = node # Приведенный ниже блок кода извлекает соседей текущего узла и обновляет их расстояния neighbors = graph.get_outgoing_edges(current_min_node) for neighbor in neighbors: tentative_value = shortest_path[current_min_node] + graph.value(current_min_node, neighbor) if tentative_value < shortest_path[neighbor]: shortest_path[neighbor] = tentative_value # We also update the best path to the current node previous_nodes[neighbor] = current_min_node # После посещения его соседей мы отмечаем узел как "посещенный" unvisited_nodes.remove(current_min_node) return previous_nodes, shortest_path def print_result(previous_nodes, shortest_path, start_node, target_node): path = [] node = target_node while node != start_node: path.append(node) node = previous_nodes[node] # Добавить начальный узел вручную path.append(start_node) result_text = "Найден следующий лучший маршрут с расстоянием {} км".format(shortest_path[target_node]) result_text += "\n" + " -> ".join(reversed(path)) # Вставить результат в текстовое поле text_input.insert(END, result_text + "\n") nodes = {"Склад": (43.356374, 132.072318), "Некрасовская": (43.128128, 131.910649), "3-я Рабочая": (43.123089, 131.924877), "Центр": (43.115797, 131.885064), "Луговая": (43.128078, 131.940321), "Нивельского": (43.112586, 131.943152), "Нейбута": (43.116441, 131.955245), "ДВФУ": (43.025101, 131.894189)} valuegor = list(nodes.keys()) etaj = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] #Координаты остановок storage = (43.356374, 132.072318) necra = (43.128128, 131.910649) raboch = (43.123089, 131.924877) center = (43.115797, 131.885064) lugovaya = (43.128078, 131.940321) nivels = (43.112586, 131.943152) newboot = (43.116441, 131.955245) DVFU = (43.025101, 131.894189) init_graph = {} for node in nodes: init_graph[node] = {} if current_time < datetime.time(12, 0, 0): init_graph["Склад"]["Некрасовская"] = round(GD(nodes["Склад"], nodes["Некрасовская"]).km + 5, 2) init_graph["Склад"]["Центр"] = round(GD(nodes["Склад"], nodes["Центр"]).km + 5, 2) init_graph["Некрасовская"]["Нивельского"] = round(GD(nodes["Некрасовская"], nodes["Нивельского"]).km + 5, 2) init_graph["Некрасовская"]["3-я Рабочая"] = round(GD(nodes["Некрасовская"], nodes["3-я Рабочая"]).km + 5, 2) init_graph["3-я Рабочая"]["Нейбута"] = round(GD(nodes["3-я Рабочая"], nodes["Нейбута"]).km + 5, 2) init_graph["3-я Рабочая"]["ДВФУ"] = round(GD(nodes["3-я Рабочая"], nodes["ДВФУ"]).km + 5, 2) init_graph["3-я Рабочая"]["Луговая"] = round(GD(nodes["3-я Рабочая"], nodes["Луговая"]).km + 5, 2) init_graph["ДВФУ"]["Нейбута"] = round(GD(nodes["ДВФУ"], nodes["Нейбута"]).km + 5, 2) init_graph["Луговая"]["Нивельского"] = round(GD(nodes["Луговая"], nodes["Нивельского"]).km + 5, 2) init_graph["Луговая"]["ДВФУ"] = round(GD(nodes["Луговая"], nodes["ДВФУ"]).km + 5, 2) elif current_time < datetime.time(18, 0, 0): init_graph["Склад"]["Некрасовская"] = round(GD(nodes["Склад"], nodes["Некрасовская"]).km + 6, 2) init_graph["Склад"]["Центр"] = round(GD(nodes["Склад"], nodes["Центр"]).km + 5, 2) init_graph["Некрасовская"]["Нивельского"] = round(GD(nodes["Некрасовская"], nodes["Нивельского"]).km + 6, 2) init_graph["Некрасовская"]["3-я Рабочая"] = round(GD(nodes["Некрасовская"], nodes["3-я Рабочая"]).km + 6, 2) init_graph["3-я Рабочая"]["Нейбута"] = round(GD(nodes["3-я Рабочая"], nodes["Нейбута"]).km + 6, 2) init_graph["3-я Рабочая"]["ДВФУ"] = round(GD(nodes["3-я Рабочая"], nodes["ДВФУ"]).km + 6, 2) init_graph["3-я Рабочая"]["Луговая"] = round(GD(nodes["3-я Рабочая"], nodes["Луговая"]).km + 6, 2) init_graph["ДВФУ"]["Нейбута"] = round(GD(nodes["ДВФУ"], nodes["Нейбута"]).km + 6, 2) init_graph["Луговая"]["Нивельского"] = round(GD(nodes["Луговая"], nodes["Нивельского"]).km + 6, 2) init_graph["Луговая"]["ДВФУ"] = round(GD(nodes["Луговая"], nodes["ДВФУ"]).km + 6, 2) else: init_graph["Склад"]["Некрасовская"] = round(GD(nodes["Склад"], nodes["Некрасовская"]).km + 5, 2) init_graph["Склад"]["Центр"] = round(GD(nodes["Склад"], nodes["Центр"]).km + 5, 2) init_graph["Некрасовская"]["Нивельского"] = round(GD(nodes["Некрасовская"], nodes["Нивельского"]).km, 2) init_graph["Некрасовская"]["3-я Рабочая"] = round(GD(nodes["Некрасовская"], nodes["3-я Рабочая"]).km, 2) init_graph["3-я Рабочая"]["Нейбута"] = round(GD(nodes["3-я Рабочая"], nodes["Нейбута"]).km, 2) init_graph["3-я Рабочая"]["ДВФУ"] = round(GD(nodes["3-я Рабочая"], nodes["ДВФУ"]).km, 2) init_graph["3-я Рабочая"]["Луговая"] = round(GD(nodes["3-я Рабочая"], nodes["Луговая"]).km, 2) init_graph["ДВФУ"]["Нейбута"] = round(GD(nodes["ДВФУ"], nodes["Нейбута"]).km, 2) init_graph["Луговая"]["Нивельского"] = round(GD(nodes["Луговая"], nodes["Нивельского"]).km, 2) init_graph["Луговая"]["ДВФУ"] = round(GD(nodes["Луговая"], nodes["ДВФУ"]).km, 2) #КОД МЕНЮ def close_window(): root.destroy() def save_to_file(): text_to_save = text_input.get("1.0", END) file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")]) if file_path: try: with open(file_path, 'w', encoding='utf-8') as file: file.write(text_to_save) except Exception as e: print(f"An error occurred while saving the file: {e}") def open_file(): file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")]) if file_path: try: with open(file_path, 'r', encoding='utf-8') as file: text = file.read() text_input.delete(1.0, END) text_input.insert(END, text) except Exception as e: print(f"An error occurred while opening the file: {e}") def change_button_color(): color = colorchooser.askcolor(title="Choose Button Color") if color[1]: # Check if a color was chosen save_button.config(bg=color[1]) open_button.config(bg=color[1]) exit_button.config(bg=color[1]) slovo_button.config(bg=color[1]) delete_button.config(bg=color[1]) run_button.config(bg=color[1]) def change_menu_color(): color = colorchooser.askcolor(title="Choose Button Color") if color[1]: # Check if a color was chosen text_input.config(bg=color[1]) text1_input.config(bg=color[1]) root.config(bg=color[1]) def current_time(): t = time.localtime() current_time = time.strftime("%H:%M:%S", t) text1_input.delete(1.0, END) text1_input.insert(END, current_time) #Выбор пункта доставки selected_value = None def select_value(): global selected_value selected_value = combo.get() print(f"Выбрано значение: {selected_value}") #Выбор этажа selected_value1 = None def select_value1(): global selected_value1 selected_index = combo1.current() selected_value1 = etaj[selected_index] print("Selected value:", selected_value1) #Выбор стартовой точки selected_value2 = None def select_value2(): global selected_value2 selected_value2 = combo2.get() print(f"Выбрано значение: {selected_value2}") def clear_text(): text_input.delete(1.0, END) text1_input.delete(1.0, END) root = Tk() root.title("Меню") root.geometry("1920x1080") root.option_add("*tearOff", False) main_menu = Menu() file_menu = Menu() setting_menu = Menu() selected_font = tk.StringVar(root) main_menu.add_cascade(label="Файл", menu=file_menu) main_menu.add_cascade(label="Настройки", menu=setting_menu) file_menu.add_command(label="Выход", command=close_window) setting_menu.add_command(label="Выбор цвета кнопок", command = change_button_color) setting_menu.add_command(label="Выбор цвета меню", command = change_menu_color) root.config(menu=main_menu) text_input = Text(root, wrap="word", height=30, width=120, font = ("Arial", 16)) # Указываем высоту и ширину текстового поля text_input.grid(row=0, column=0, rowspan=3, padx=10, pady=10) #Подпись для обозначения цены label = Label(root, text="Стоимость доставки", font = ("Arial", 16)) label.place(x = 340, y = 777) text1_input = Text(root, wrap="word", height=1, width=25 , font = ("Arial", 16)) text1_input.grid(row=4, column=0, rowspan=1, padx=0, pady=0) #ввод этажа для доставки label1 = Label(root, text="Этаж доставки", font = ("Arial", 16)) label1.place(x = 340, y = 807) #Выбор этажа combo1 = ttk.Combobox(root, values=etaj) combo1['values'] = etaj combo1.grid(row=5, column=0, padx=0, pady=0) #кнопка Выбора этажа button_etaj = Button(root, text="Выбрать этаж", command=select_value1) button_etaj.place(x = 840, y = 807) save_button = Button(root, text="Сохранить", command=save_to_file) save_button.grid(row=0, column=1, padx=10, pady=5) open_button = Button(root, text="Загрузить", command=open_file) open_button.grid(row=1, column=1, padx=10, pady=5) #Кнопка выхода exit_button = Button(root, text="Выход", command=close_window) exit_button.grid(row=6, column=0, padx=10, pady=5) #Выбор пункта доставки combo = ttk.Combobox(root, values=valuegor) combo.grid(row=2, column=2, padx=10, pady=5) combo.bind("<<ComboboxSelected>>", select_value) #Выбор стартовой точки #combo2 = ttk.Combobox(root, values=nodes) #combo2.grid(row=3, column=2, padx=10, pady=5) #combo2.bind("<<Combobox2Selected>>", select_value2) slovo_button = Button(root, text="Выбрать", command=select_value) slovo_button.grid(row=2, column=1, padx=10, pady=5) #slovo1_button = Button(root, text="Выбрать", command=select_value2) #slovo1_button.grid(row=3, column=1, padx=10, pady=5) delete_button = Button(root, text="Очистить", command=clear_text) delete_button.grid(row=4, column=1, padx=10, pady=5) #Сбор остановок в массив array = [] def add_value(): value = combo.get() array.append(value) #text_input.delete(0, tk.END) def display_array(): text_input.config(state=tk.NORMAL) #text_input.delete(1.0, tk.END) text_input.insert(tk.END, "Текущий список остановок: ") text_input.insert(tk.END, ', '.join(array)) #text_input.config(state=tk.DISABLED) add_button = tk.Button(root, text="Добавить значение", command=add_value) add_button.grid(row=0, column=2) display_button = tk.Button(root, text="показать массив", command=display_array) display_button.grid(row=0, column=3) #Конец этой части кода #Функция запуска алгоритма Дейкстры def run_dijkstra(): global selected_value global selected_value1 global selected_value2 route_value = 0 if selected_value: for index, znach in enumerate(array): previous_index = index -1 if index == 0: graph = Graph(nodes, init_graph) previous_nodes, shortest_path = dijkstra_algorithm(graph=graph, start_node= selected_value) print_result(previous_nodes, shortest_path, start_node= selected_value, target_node=znach) route_value += shortest_path[znach] elif index < len(array): previous_znach = array[previous_index] graph = Graph(nodes, init_graph) previous_nodes, shortest_path = dijkstra_algorithm(graph=graph, start_node= previous_znach) print_result(previous_nodes, shortest_path, start_node= previous_znach, target_node=znach) route_value += shortest_path[znach] #Рассчет стоимости traffic_value = 150 if route_value > 30: traffic_value = 150 * route_value * selected_value1 text1_input.insert(END, traffic_value) else: text1_input.insert(END, traffic_value + 150) text_input.insert(END, route_value) #text_input.insert(END, result_text) #Конец рассчета стоимости # Создайте новую кнопку для запуска алгоритма Дейкстры run_button = Button(root, text="Запустить Дейкстру", command=run_dijkstra) run_button.grid(row=4, column=2, padx=10, pady=5) root.mainloop()
from PyQt5.QtWidgets import QWidget from PyQt5.Qt import * import sys from enum import Enum class Direction(Enum): Up = 0 Down = 1 class Joystick(QWidget): def __init__(self, parent=None): super(Joystick, self).__init__(parent) self.setMinimumSize(1200, 600) self.movingOffset = QPointF(0, 0) self.grabCenter = False self.__maxDistance = 50 def paintEvent(self, event): painter = QPainter(self) bounds = QRectF(-self.__maxDistance, -self.__maxDistance, self.__maxDistance * 2, self.__maxDistance * 2).translated(self._center()) painter.drawEllipse(bounds) painter.setBrush(Qt.black) painter.drawEllipse(self._centerEllipse()) def _centerEllipse(self): if self.grabCenter: return QRectF(-20, -20, 40, 40).translated(self.movingOffset) return QRectF(-20, -20, 40, 40).translated(self._center()) def _center(self): return QPointF(self.width()/2, self.height()/2) def _boundJoystick(self, point): limitLine = QLineF(self._center(), point) if (limitLine.length() > self.__maxDistance): limitLine.setLength(self.__maxDistance) return limitLine.p2() def joystickDirection(self): if not self.grabCenter: return 0 normVector = QLineF(self._center(), self.movingOffset) currentDistance = normVector.length() angle = normVector.angle() distance = min(currentDistance / self.__maxDistance, 1.0) if 45 <= angle < 135: return (Direction.Up, distance) if 225 <= angle < 315: return (Direction.Down, distance) def mousePressEvent(self, ev): self.grabCenter = self._centerEllipse().contains(ev.pos()) return super().mousePressEvent(ev) def mouseReleaseEvent(self, event): self.grabCenter = False self.movingOffset = QPointF(0, 0) self.update() def mouseMoveEvent(self, event): if self.grabCenter: print("Moving") self.movingOffset = self._boundJoystick(event.pos()) self.update() print(self.joystickDirection()) if __name__ == '__main__': app = QApplication([]) app.setStyle(QStyleFactory.create("Cleanlooks")) mw = QMainWindow() mw.setWindowTitle('Joystick') cw = QWidget() ml = QGridLayout() cw.setLayout(ml) mw.setCentralWidget(cw) joystick = Joystick() ml.addWidget(joystick,0,0) mw.show() if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): QApplication.instance().exec_()
import device from device.enums import * import time dev = device.find_any() try: for i in range(1): dev.axis0.requested_state = AxisState.CLOSED_LOOP_CONTROL time.sleep(1) dev.axis0.controller.input_vel = 15 time.sleep(5) dev.axis0.controller.input_vel = 0 time.sleep(1) dev.axis0.requested_state = AxisState.IDLE time.sleep(1)
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView from PyQt5.QtGui import QPen, QPainter from PyQt5.QtCore import Qt class TestSequence(QGraphicsView): def __init__(self, sequence): super().__init__() self.setWindowTitle("Test Sequence") self.setGeometry(100, 100, 800, 600) scene = QGraphicsScene(self) self.setScene(scene) pen = QPen(Qt.black) pen.setWidth(2) x, y = 0, 0 for bit in sequence: if bit == '0': scene.addLine(x, y, x + 20, y, pen) x += 20 elif bit == '1': scene.addLine(x, y, x, y - 20, pen) y -= 20 def read_sequence(filename): with open(filename, 'r') as file: sequence = file.read().strip() return sequence if __name__ == '__main__': app = QApplication(sys.argv) sequence = read_sequence("last_bits.txt") test_sequence = TestSequence(sequence) test_sequence.show() sys.exit(app.exec_())