from matplotlib import pyplot
plot: Plot = ... # тут твой Plot
fig: pyplot.Figure = plot.backend.fig
self.fig = self.plt.figure(figsize=parent.size)
def check_gui_queue():
try:
while True:
command = gui_queue.get_nowait() # проверяем, есть ли команда для GUI
gui_queue.task_done() # на каждый успешный вызов get() - один вызов task_done()
pass # как-то обрабатываем команду
except queue.Empty: # команды нет
root.after(100, check_gui_queue) # даём GUI поработать спокойно 100 мс
async def check_bot_queue():
while True:
try:
command = bot_queue.get_nowait() # проверяем, есть ли новая команда для бота
except queue.Empty:
await asyncio.sleep(0.1) # нет - даём другим корутинам поработать 100 мс
else:
bot_queue.task_done() # на каждый успешный вызов get() - один вызов task_done()
pass # есть - как-то её обрабатываем
_tkinter.TclError: bad option "-tittle": must be -default, -detail, -icon, -message, -parent, -title, or -type
File "c:\Users\Solo\Desktop\MAXIUMAM2035\Go_user.py", line 19, in button_click
messagebox.showinfo(tittle='Проверка', message=info_str) # Для вывода информации
^^^^^^
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()
variables = {}
def s():
unique_types = ['1', '2', '3', '4', '5']
entry = {}
label = {}
combo_list = []
types = ['Соответсвия нет', 'A', 'B', 'C']
for row, name in enumerate(unique_types, 0):
value = StringVar()
variables[name] = value
lb = ttk.Label(root, text=name)
lb.grid(row=row, column=0)
label[name] = lb
combobox = ttk.Combobox(root, textvariable=value, values=types, width=90, state="readonly")
combobox.current(0)
combobox.grid(row=row, column=2, padx=10, pady=5)
combo_list.append(combobox)
entry[name] = combobox
b = ttk.Button(root, text="Print all", command=lambda: print_all_entries(unique_types, entry, label))
b.grid(row=row + 1, column=2, padx=10, pady=5)
tkinter.Button(btn_0)
А то я думал, что только текст передавать можно
x = phonenumbers.parse(self.ent_1, 'None')
self.ent_1 = Entry(self,width=36)
carrier_2 = print(carrier_1)
entry_widget.event_generate('<<Paste>>')
screen.protocol("WM_DELETE_WINDOW", block_mouse())
root.mainloop()
http.client.RemoteDisconnected: Remote end closed connection without response