CREATE TABLE IF NOT EXISTS
не сработает, если таблица уже существует - но и только. Если она имеет неправильную структуру, данный вызов её не пересоздаст, а оставит как есть. Проверь структуру таблицы, либо через обращение к таблице схемы (хранит структуру всех таблиц к БД), либо подцепившись клиентом к твоей БД. class Enemy:
...
def mobReturn(self):
self.x_mob = self.rect.x
class Bullet(pygame.sprite.Sprite):
def update(self):
if x_mob>=100:
# include <fstream>
# include <string>
using namespace std;
const char* readfile(char* filename) {
ifstream file;
string lines, line;
file.open(filename);
if (file.is_open()) {
while (file >> line) {
lines += line;
}
file.close();
return lines.c_str();
} else {
char* trashVar = "Bad open";
return trashVar;
}
}
int main()
{
cout << readfile("filename.txt");
return 0;
}
import threading
import tkinter
from tkinter import ttk
import time
# Этот класс описывает длительную операцию, выполняемую в потоке.
class LongRunningOperation(threading.Thread):
# если твоя операция требует аргументы, они передаются через конструктор
def __init__(self, my_argument):
super().__init__(daemon=True) # если главный поток завершился, мы тоже должны
self._my_argument = my_argument # и сохраняются в self
self._stop_flag = threading.Event() # а это - признак "Пора останавливаться"
self._progress = 0 # эта переменная отслеживает прогресс
# этот объект гарантирует, что наш и внешний потоки не будут трогать self._progress одновременно
self._progress_lock = threading.Lock()
# От threading.Thread() мы унаследуем два важных метода
# start() вызывается снаружи потока и запускает наш поток
# wait() вызывается снаружи потока и ждёт, пока наш поток не остановится
# Этот метод вызывается снаружи потока и сигнализирует об остановке
# Но остановиться поток должен будет сам
def stop(self):
self._stop_flag.set() # threading.Event безопасен для использования несколькими потоками.
# Этот метод вызывается снаружи потока и позволяет узнать прогресс длительной операции
def get_progress(self):
with self._progress_lock: # любые обращения к self._progress заворачиваются в такой блок
# вообще, для чисел Lock не требуется. Но если ты хочешь сообщать что-то большее, это надо делать.
return self._progress
# Тело этого метода будет выполняться в отдельном потоке.
# Именно этот метод реализует длительную операцию.
def run(self):
# я не знаю, что творится у тебя в коде.
# Тебе придётся адаптировать свой код под этот шаблон.
self._progress = 0
self._stop_flag.clear()
print('Operation started')
while not self._stop_flag.is_set(): # пока нам не сказали остановиться
# Тут ты выполняешь порцию своей длительной работы. Например, одну итерацию цикла.
print('Operation with my_argument =', self._my_argument)
time.sleep(0.1) # это просто для примера - ждём 0.1 секунды.
# Выше ты выполняешь порцию своей длительной работы. Например, одну итерацию цикла.
with self._progress_lock:
self._progress += 1 # наращиваем прогресс
if self._progress == 100:
# в данном случае прерываем цикл, если прогресс дошел до 100 - дело сделано
# если у тебя цикл "пока снаружи не остановят", то условие и break можно убрать
break
print('Operation stopped')
class MainWindow(tkinter.Tk): # окно приложения
def __init__(self):
super().__init__()
self._operation = None # а вот тут будет храниться экземпляр класса LongRunningOperation
self.title('Pet Clicker III')
self.geometry('600x600')
self._progress = tkinter.IntVar() # переменная для прогресса в окне
# прогрессбар подхватит эту переменную, так как мы её указали в параметрах
self._progressbar = ttk.Progressbar(self, maximum=100, variable=self._progress, mode='determinate')
self._progressbar.pack(side='top', expand=True, fill='x')
self._button = tkinter.Button(self, text='Start', command=self._start_stop) # кнопка пуск/стоп
self._button.pack(side='top', expand=True, fill='x')
self.after(500, self._check_progress) # через 500 мс надо вызвать _check_progress()
def _check_progress(self): # показывает прогерсс операции в окне, если есть что показывать
if self._operation is not None: # операция сейчас выполняется?
progress = self._operation.get_progress()
self._progress.set(progress) # задаём новое значение прогресса
if not self._operation.is_alive(): # поток уже остановился?
self._progress.set(0) # сбрасываем прогресс
self._button.config(text='Start') # переименовываем кнопку
self._operation = None # забываем про объект операции
self.after(500, self._check_progress) # ещё через 500 мс вызовем функцию снова
def _start_stop(self): # запускает или останавливает операцию
if self._operation is None: # операции нет - запускаем её
self._operation = LongRunningOperation(42) # передаём аргументы в операцию. В нашем случае my_argument = 42.
self._progress.set(0) # сбрасываем прогресс
self._button.config(text='Stop') # переименовываем кнопку
self._operation.start() # запускаем второй поток, который будет выполнять операцию
else: # операция уже запущена - останавливаем её
self._operation.stop() # даём сигнал "остановись"
self._operation.join() # ждём, пока она действительно не остановится
self._progress.set(0) # сбрасываем прогресс
self._button.config(text='Start') # переименовываем кнопку
self._operation = None # забываем про объект операции
wnd = MainWindow()
wnd.mainloop()
Я написал такой код:
lambda callback_query: True
- это означает "принимать любые коды запроса". Но ведь можно True возвращать не всегда. await message.create_thread(name=nick, message=msg)
TypeError: create_thread() got an unexpected keyword argument 'message'
Parameters
name (str) – The name of the thread.
auto_archive_duration (int) – The duration in minutes before a thread is automatically archived for inactivity. If not provided, the channel’s default auto archive duration is used.
slowmode_delay (Optional[int]) – Specifies the slowmode rate limit for user in this channel, in seconds. The maximum value possible is 21600. By default no slowmode rate limit if this is None.
reason (Optional[str]) – The reason for creating a new thread. Shows up on the audit log.
class Point:
def __init__(self):
self.x = 0
self.y = 0
point = Point()
# у point есть два собственных атрибута, x и y
print(point.__dict__) # {'x': 0, 'y': 0}
class Point:
def __init__(self, is_3d):
self.x = 0
self.y = 0
if is_3d: # этот параметр не используется как значение атрибута
self.z = 0 # а этот атрибут может присутствовать или отсутствовать
point_2d = Point(False)
print(point_2d.__dict__) # {'x': 0, 'y': 0}
point_3d = Point(True)
print(point_3d.__dict__) # {'x': 0, 'y': 0, 'z': 0}
class Point:
def __init__(self):
self.x = 0
self.y = 0
point = Point()
print(point.__dict__) # {'x': 0, 'y': 0}
point.name = 'Start' # создаём атрибут "на ходу"
print(point.__dict__) # {'x': 0, 'y': 0, 'name': 'Start'}