from PyQt5 import QtCore, QtGui, QtWidgets
import pyautogui
import threading
class Ui_MainWindow(object):
# ... ваш предыдущий код ...
def add_functions(self):
self.pushButton.clicked.connect(self.start_autoswap)
self.stopButton.clicked.connect(self.stop_autoswap) # Добавьте кнопку остановки в ваш интерфейс
def start_autoswap(self):
self.autoswap_thread = threading.Thread(target=self.autoswap, daemon=True)
self.autoswap_thread.start()
def stop_autoswap(self):
self.running = False
def autoswap(self):
self.running = True
while self.running:
x = 459
y = 1402
Color = pyautogui.screenshot().getpixel((x, y))
print(Color)
if Color == (185, 185, 185):
pyautogui.press("2", presses=4, interval=0.01)
# ... остальная часть вашего кода ...
start_autoswap
запускает метод autoswap
в отдельном потоке.self.running
используется для контроля выполнения цикла.stop_autoswap
изменяет значение self.running
на False
, что приводит к остановке цикла.stop_autoswap
. Также убедитесь, что вы используете daemon=True
при создании потока, чтобы он завершался вместе с основной программой. SELECT a, b, c FROM data WHERE data MATCH 'a:$fullQuery OR b:$fullQuery' AND NOT c:$fullQuery;
MATCH
для поиска по столбцам a
и b
с использованием переменной $fullQuery
. Оператор AND NOT
исключает результаты, где столбец c также соответствует запросу $fullQuery
.$fullQuery
содержит “Что ГЛАВРЫБА может”, запрос вернет строки, где a
или b
содержат эту фразу, но c
не содержит её. Это позволит вам исключить столбец c
из поиска, но при этом включить его в выводимые результаты. Пожалуйста, убедитесь, что ваш запрос корректно обрабатывает специальные символы и пробелы в $fullQuery
. async/await
для асинхронных операций, вы можете использовать библиотеку mysql2/promise
, которая поддерживает промисы и позволяет использовать async/await
. Вот пример того, как можно реализовать ваш запрос:const mysql = require('mysql2/promise');
async function getData() {
const connection = await mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
try {
const [rows, fields] = await connection.execute('SELECT * FROM price_history_1d');
for (let row of rows) {
console.log(`ID: ${row['birza']}, NAME: ${row['symbol']}, PRICE: ${row['price']}`);
// Теперь вы можете работать с каждой строкой данных как с объектом
// Например, вы можете сохранить данные в переменные или отправить их куда-либо
}
} catch (err) {
console.error(err);
} finally {
await connection.end();
}
}
getData();
getData
, которая устанавливает соединение с базой данных, выполняет запрос и выводит результаты. Каждая строка результатов обрабатывается в цикле, и вы можете сохранять данные в переменные или использовать их для других операций внутри цикла.mysql2/promise
вам нужно будет установить этот пакет через npm:npm install mysql2
async/await
позволяет писать асинхронный код, который выглядит как синхронный, и делает его более читаемым и удобным для отладки. ForEach-Object
или foreach
. В вашем случае, когда у вас есть два файла с данными, и вы хотите создать символические ссылки для каждой пары номера ПК и имени пользователя, скрипт может выглядеть следующим образом:$pc_numbers = Get-Content 'C:\test\pc_name_stm.txt'
$user_names = Get-Content 'C:\test\stm_name.txt'
for ($i = 0; $i -lt $pc_numbers.Length; $i++) {
$pc_number = $pc_numbers[$i]
$user_name = $user_names[$i]
$path = "\\$pc_number\c$\Users\$user_name\Desktop\Полезные_ссылки_СТМ"
$target = "\\192.168.123.220\Shared\СТМ\Полезные_ссылки_СТМ"
New-Item -ItemType SymbolicLink -Path $path -Target $target
}
$pc_numbers
и $user_names
. Затем он использует цикл for
, чтобы пройти по каждому элементу массивов, создавая символическую ссылку для каждой пары номера ПК и имени пользователя.$pc_number
и $user_name
являются отдельными элементами массива, а не всем массивом сразу. package.json
находится не в корневой папке, где вы открываете VS Code, то действительно, могут возникнуть проблемы с распознаванием TypeScript и соответствующих плагинов, таких как typescript-plugin-css-modules
. Вот несколько шагов, которые могут помочь решить эту проблему:package.json
. Это может потребовать запуска команды установки в соответствующей подпапке.settings.json
, указав путь к нужной версии TypeScript.tsconfig.json
. Убедитесь, что путь к плагину typescript-plugin-css-modules указан относительно корня рабочей области, где находится package.json
.package.json
файлов и соответствующие конфигурации TypeScript в одной рабочей области.<Navigate>
в вашем компоненте NotFound
заключается в том, что вы пытаетесь использовать его как JSX-элемент внутри обработчика событий, что не приведет к рендерингу и перенаправлению. Вместо этого вам нужно использовать хук useNavigate
для программного перенаправления.import { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
export default function NotFound(props) {
const [redirectTimeOut, setRedirectTimeOut] = useState(5);
const navigate = useNavigate(); // Используйте хук useNavigate
useEffect(() => {
const interval = setInterval(() => {
if (redirectTimeOut >= 1) {
setRedirectTimeOut((current) => (current >= 1 ? current - 1 : 0));
} else {
clearInterval(interval);
navigate('/'); // Программное перенаправление
}
}, 1000);
// Очистка интервала при размонтировании компонента
return () => clearInterval(interval);
}, [redirectTimeOut, navigate]); // Добавьте navigate в массив зависимостей
const failedURL = "https://main/test";
return (
<div className="notFound-page">
{/* Остальной код компонента */}
</div>
);
}
navigate('/')
будет вызвана, и пользователь будет перенаправлен на главную страницу. Убедитесь, что вы добавили navigate
в массив зависимостей useEffect
, чтобы избежать нежелательных повторных вызовов перенаправления. void Start() {
FirebaseAuth auth = FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
AuthStateChanged(this, null);
}
void AuthStateChanged(object sender, EventArgs eventArgs) {
if (FirebaseAuth.DefaultInstance.CurrentUser != null && FirebaseAuth.DefaultInstance.CurrentUser.IsEmailVerified) {
// Пользователь вошел в систему и подтвердил свой Email.
// Переход в игру.
} else {
// Пользователь либо не вошел в систему, либо не подтвердил Email.
// Оставаться на экране входа или регистрации.
}
}
void OnDestroy() {
if (auth != null) {
auth.StateChanged -= AuthStateChanged;
auth = null;
}
}
void* pMemory = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE | PAGE_WRITECOMBINE);