translation=translator.translate(text, dest=lang)
translated=translation.text
root_changes_2.mainloop()
запускает основной рабочий цикл. В нём программа получает сообщения от ОС о действиях пользователя и реагирует на них. Цикл прерывается, когда закрывается основное окно (ты хранишь ссылку на него в root_changes_2).import tkinter as tk
import tkinter.messagebox as tkmb
class MainWindow(tk.Tk):
"""Главное окно программы наследуется от Tk.
Вспомогательные окна - от TopLevel.
Составные элементы управления - от Frame."""
def __init__(self):
"""Метод __init__() автоматически вызывается при создании нового экземпляра класса."""
super().__init__() # обязательно вызываем конструктор родительского класса!
# при закрытии нашего окна вызовется метод __done()
# если эта функциональность не нужна, можно убрать эту строку
self.protocol('WM_DELETE_WINDOW', self.__done)
# пример создания элементов управления
# имена, начинающиеся с __, не видны снаружи класса
# мы присваиваем не просто переменным, а полям объекта. Эти поля будут видны в других методах.
self.__entry = tk.Entry(self) # поле ввода будет вложено непосредственно в наше окно
self.__entry.pack(side=tk.TOP, fill=tk.X, expand=True)
self.__btn = tk.Button(self, text='Нажми меня', command=self.__btn_pressed) # кнопка и реакция на неё
self.__btn.pack(side=tk.TOP)
def __done(self):
"""Мы прописали вызов этого метода при закрытии окна.
Тут мы можем корректно завершить работу нашей программы, а потом подтвердить закрытие."""
self.destroy() # подтверждаем закрытие. Если этот вызов не сделать, окно не закроется. Иногда это нужно.
def __btn_pressed(self):
"""Реакция на кнопку."""
text = self.__entry.get() # мы можем обращаться к полям объекта
tkmb.showinfo(
title='Вы ввели',
message=text,
parent=self
)
if __name__ == '__main__':
# это условие выполнится, только если скрипт запущен непосредственно
# оно не выполнится, если скрипт импортируется другим скриптом
# поэтому в такое условие обычно заворачивают "тело" скрипта
wnd = MainWindow() # создаём окно
wnd.mainloop() # главный рабочий цикл
# сюда управление будет передано после закрытия окна
print('Окно закрыто, пока!')
message.text
посмотреть в message.text_markdown
или message.text_html
(доки)? Ну и соответственно указать не text, а markdown или html при вызове send_message(). Если запускать через cmd не работает
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{4d36e978-e325-11ce-bfc1-08002be10318}
. Во вложенных ветках будет свойство DeviceInstance
, собираешь значения этого свойства. Затем заглядываешь в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\сюда вставляешь значение DeviceInstance\Device Parameters
, там можно найти имя порта и еще кое-что полезное.ODBC Driver 18 for SQL Server
.server = 'Serv'
database = 'resource'
username = ''
password = ''
connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}'
cnxn = pyodbc.connect(connectionString)
N = 18
R = 200
for _ in range(N):
turtle.circle(R, 360 / N)
time.sleep(0.1)
turtle.pencolor("white")
.try:
from .wtf import stuff
except ImportError:
from wtf import stuff
from __init__ import *
class Parent:
known_children = [] # список классов-потомков Parent
@staticmethod
def register(klass): # декоратор для регистрации классов-потомков
Parent.known_children.append(klass)
return klass
@classmethod
def can_handle(cls, data): # "эй, потомок, ты можешь себя создать из этих данных?"
raise NotImplementedError()
@staticmethod
def make(data): # создаёт экземпляр одного из потомков
for child in Parent.known_children:
if child.can_handle(data): # потомок согласился обработать данные?
return child(data) # вызываем конструктор класса-потомка
else: # относится к for ... in !
raise TypeError(f'Никто не знает, что делать с этим:\n{data!r}')
# тут остальная начинка класса
...
# а это пример потомка
@Parent.register # явная регистрация потомка через декоратор
# так удобнее, потому что так можно создавать промежуточных потомков,
# которые не будут реально использоваться - только в наследовании
class SomeChild(Parent):
@classmethod
def can_handle(cls, data):
return data.get('name', None) == 'SomeChild' # критерий для определения - наш случай или нет?
def __init__(self, data):
self.x = data['x']
self.y = data['y']
c = Parent.make({'name': 'SomeChild', 'x': 42, 'y': 69}) # создаст экземпляр SomeChild
print(c)
try:
Parent.make({'name': 'invalid'}) # потерпит неудачу
except TypeError as err:
print(err)
import re
pattern = re.compile(r'^\d+\.\s+') # начало строки, 1+ цифра, точка, 1+ пробел
# re.compile() можно сделать один раз, а потом переиспользовать полученный pattern
text = '1. Салат 1'
result = pattern.sub('', text) # заменяем пустой строкой подходящие под шаблон части text
print(result)
def setting(self):
self.server.check_currency()
...
self.setting()
window1 = Kurz()
, так как приложение уйдёт в рекурсивный вызов self.setting()
и из него уже не вернётся.