Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » Wxpython. Определить страницу под курсором » Июнь 29, 2018 11:13:29

Использую wxpython для оконного приложения. Есть некий класс - LibPalette, который наследуется от wx.Notebook. Это окно вида (см. рис.)
Видно две страницы test и controls. Каждая страница это тоже класс. Страницы добавляются с помощью метода AddPage(). Хотелось бы при наведении курсора мыши на вкладку выводить некую подсказку.
Вопрос в следующем: как определить на что наведен курсор мыши?
Можно было бы использовать метод self.GetPageText(self.GetSelection()) и определять по id-шнику страницу, но это работает только для конкретной выбранной страницы. А хотелось бы независимо от той страницы, на который сейчас находимся, выводить данные для той страницы на которую наведен курсор. Возможно это как-то сделать?

Так же, если кто знает, подскажите, пожалуйста, как перейти на другую страницу при нажатии на нее ПКМ? Объявил событие self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightClick), но вот никак не получается перейти на другую вкладу (пробовал генерировать событие клика ЛКМ, не помогло).

Python для новичков » pyinstaller тема оформления » Июнь 26, 2018 18:56:59

Привет всем подскажите , когда запускаю скрипт из IDE то оформления винды
Когда собираю pyinstaller , то получаю оформления от winXP
Как поправить?

GUI » Как вставить изображение из буфера в PyQt5? » Июнь 24, 2018 11:44:26

Пишу программу по типу paint с помощью PyQt5.
Мне надо сделать копирование в буфер из canvas и вставка из буфера обратно в canvas, где формируется и изменяется изображение. Не могу найти нигде, как правильно сделать вставку.

Копирование в буфер получается:
def copy_to_clipboard(self):
clipboard = QApplication.clipboard()
clipboard.setPixmap(self.canvas.pixmap())

Подскажите, как написать функцию вставки из буфера.


P.S.: в коде здесь отступы почему-то не сохраняются…

Базы данных » Доступ к MS SQL Server с Django 2.0.6 » Июнь 20, 2018 21:36:46

Доброго времени суток!

Столкнулся со следующей проблемой. Необходимо подключить default БД MS SQL SERVER, но не получается…
Ознакомился со ссілкой в документации - результат ноль. Последняя комбинация) которую нагуглил:
“DATABASES = {
‘default’: {
‘ENGINE’: ‘sql_server.pyodbc’,
‘NAME’: ‘NAME’,
‘HOST’: ‘HOST’,
‘PORT’: 1433,
‘USER’: ‘USER’,
‘PASSWORD’: '',

}”
, предварительно установил драйвер через pip.
Подскажите, если кто-то сталкивался, поддерживатеся ли подключение к данной БД в указанной версии django и буду благодарен за подсказку как это сделать, если возможно!

Python для новичков » Pandas dataframe перебор и изменение значений » Июнь 19, 2018 15:57:08

добрый день,
есть задача переноса значений по условию.

представим простой dataframe
SOURCE VALUE
yandex / organic 0.40
google / organic 0.01
google / cpc 0.01
google / cpc 0.01
google / cpc 0.01
yandex / organic 0.01
yandex / organic 0.01
google / organic 0.40

нужно перенести value и приплюсовать к значению ниже если sorce содержит organic
и так по строкам. если доходит до строки, где sorce содержит cpc, прибавить к его значению все расее приплюсованные значения от строк с organic. Если на след. строке сново есть cpc - value оставляем без изменения. если не было больше cpc, плюсуем всё к значению последней строки в датафрейме.

вот что планируется получить в результате
SOURCE VALUE
yandex / organic 0.00
google / organic 0.00
google / cpc 0.42
google / cpc 0.01
google / cpc 0.01
yandex / organic 0.00
yandex / organic 0.00
google / organic 0.42

как я это вижу, нужна переменная foo = 0
добавим новый столбец value2
перебираеть датафрейм по строкам
применять к строке str.contains('organic', regex=False)
если скрипт находит - value2 делаем равным foo, то есть 0
после foo += value и идём на строку ниже.

мне кажется логика моя не верна. если есть идеи, как решить задачу более корректно, прошу подсказать


Python для новичков » Тестирование записи файла на диск напрямую без кеша ОС. Как правильно проверить скорость запись на диск? » Июнь 19, 2018 11:37:55

Добрый день!
Подскажите пожалуйста правильно ли я тестирую запись файла на диск напрямую без кеша ОС?
 #!/usr/bin/env python3
import os
import time
import cProfile
import mmap
def ioTest():
    m = mmap.mmap(-1, 1024*1024)
    block = bytes('A'*1024*1024, 'utf-8')
    m.write(block)
    filename = 'test.bin'
    f = os.open(filename, os.O_WRONLY | os.O_CREAT | os.O_TRUNC |
                os.O_SYNC, os.O_DIRECT`)
    start = time.time()
    for x in range(500):
        os.write(f,m)
    os.close(f)
    transferTime_sec = time.time() - start
    msg = 'Wrote {:0f}MB in {:0.03f}s.'
    print(msg.format(os.stat(filename).st_size/1024/1024,
                     transferTime_sec))
ioTest()


Скажите, если мой пример неправильный - как правильно проверить скорость запись на диск?
У вас есть примеры как правильно проверять скорость записи на диск?
Заранее спасибо

GUI » Как сохранить фокус в TextField после перезагрузки модели в PyQt5 QML QtQuick » Июнь 19, 2018 09:32:56

 Rectangle {
    ListView {
         id: listView
         delegate: Item {
            id: cDelegate
            Item {
                Row {
                   ComboBox {
                       delegate: ItemDelegate {
                           Label {
                           //...
                           }
                       }
                   }
            
                   TextField {
                       //...
                        Keys.onEnterPressed: {
                            lModel.currentIndex = lModel.currentIndex + 1;
                            //...
                        }
                        Keys.onReturnPressed: {
                            //...
                        }
                    }
                   
                 }
             }
         }
         model: lModel
         //...
    }
}

Python для новичков » Переустановка tensorflow » Июнь 19, 2018 09:21:59

Имел некоторые проблемы с tensorflow.
На форуме sql.ru хороший человек дал мне ссылку:
https://github.com/keras-team/keras/issues/2397
где написано:
There appears to be a bug in the make_predict_function for the tensorflow backend.
The following error message appears for me when trying to call model.predict(…)
This does not happen when using the theano backend.

Check that you are up-to-date with the master branch of Keras. You can update with:
pip install git+git/github.com/fchollet/keras.git –upgrade –no-deps
If running on Theano, check that you are up-to-date with the master branch of Theano. You can update with:
pip install git+git/github.com/Theano/Theano.git –upgrade –no-deps

После выполнения
pip install git+git/github.com/fchollet/keras.git –upgrade –no-deps
получил сообщения о необходимости освежить tensorflow
После переустановки tensorflow ничего не работает.
Вот последний traceback, после которого я уже не знаю что делать:

Using TensorFlow backend.
Traceback (most recent call last):
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 14, in swig_import_helper
return importlib.import_module(mname)
File “C:\Program Files\Python36\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name, package, level)
File “<frozen importlib._bootstrap>”, line 978, in _gcd_import
File “<frozen importlib._bootstrap>”, line 961, in _find_and_load
File “<frozen importlib._bootstrap>”, line 950, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 648, in _load_unlocked
File “<frozen importlib._bootstrap>”, line 560, in module_from_spec
File “<frozen importlib._bootstrap_external>”, line 922, in create_module
File “<frozen importlib._bootstrap>”, line 205, in _call_with_frames_removed
ImportError: DLL load failed with error code -1073741795

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 17, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 16, in swig_import_helper
return importlib.import_module('_pywrap_tensorflow_internal')
File “C:\Program Files\Python36\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name, package, level)
ModuleNotFoundError: No module named ‘_pywrap_tensorflow_internal’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “K:\MT5\Python\Server1.py”, line 11, in <module>
from keras.models import model_from_json
File “C:\Program Files\Python36\lib\site-packages\keras\__init__.py”, line 3, in <module>
from . import utils
File “C:\Program Files\Python36\lib\site-packages\keras\utils\__init__.py”, line 6, in <module>
from . import conv_utils
File “C:\Program Files\Python36\lib\site-packages\keras\utils\conv_utils.py”, line 9, in <module>
from .. import backend as K
File “C:\Program Files\Python36\lib\site-packages\keras\backend\__init__.py”, line 87, in <module>
from .tensorflow_backend import *
File “C:\Program Files\Python36\lib\site-packages\keras\backend\tensorflow_backend.py”, line 5, in <module>
import tensorflow as tf
File “C:\Program Files\Python36\lib\site-packages\tensorflow\__init__.py”, line 24, in <module>
from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\__init__.py”, line 49, in <module>
from tensorflow.python import pywrap_tensorflow
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 74, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 14, in swig_import_helper
return importlib.import_module(mname)
File “C:\Program Files\Python36\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name, package, level)
File “<frozen importlib._bootstrap>”, line 978, in _gcd_import
File “<frozen importlib._bootstrap>”, line 961, in _find_and_load
File “<frozen importlib._bootstrap>”, line 950, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 648, in _load_unlocked
File “<frozen importlib._bootstrap>”, line 560, in module_from_spec
File “<frozen importlib._bootstrap_external>”, line 922, in create_module
File “<frozen importlib._bootstrap>”, line 205, in _call_with_frames_removed
ImportError: DLL load failed with error code -1073741795

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 17, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File “C:\Program Files\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 16, in swig_import_helper
return importlib.import_module('_pywrap_tensorflow_internal')
File “C:\Program Files\Python36\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name, package, level)
ModuleNotFoundError: No module named ‘_pywrap_tensorflow_internal’


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
Прошу помощи.]

GUI » PyQt5 QML QtQuick почему не выполняется код после вызова слота? » Июнь 15, 2018 15:35:53

 onClicked: {
     // Вызываем слот калькулятора, чтобы вычесть числа
     calculator.sub(firstNumber.text, secondNumber.text)
     //код после вызова слота
}

GUI » Как получить структуру всей формы QML в QT5 и всех элементов на ней? » Июнь 15, 2018 15:33:59

как узнать все индексы динамически добавленных элементов

Центр помощи » Помогите с ботом для вк » Июнь 14, 2018 18:53:08

Хочу сделать чтобы в вк ты отправлял команду //rnd 1 9, и чтобы потом я мог из сообщения взять эти числа 1 и 9 и присвоить их к переменным для последующих действий, вопрос как?

def write_msg(chat_id, s): #
vk.method('messages.send', {'chat_id':chat_id,'message':s})

if response == ‘//rnd’: #после команды например 2 цифры через пробел //rnd 1 9
write_msg (item, response)

имеется такой код, как его переписать под мои нужды?

Напишите еще пожалуйста команду для разделения массива a= нужно впихнуть 1 в переменную a,9 в переменную b.

Python для новичков » Подскажите пожалуйста, как лучше реализовать алгоритм » Июнь 14, 2018 13:38:58

Добрый день.
Недавно начал изучать Python, написал первую программу.
Суть:
Есть игра “Слова”, дается таблица 5*5, в каждой ячейке таблицы занесена буква, нужно из этих букв составить как можно больше слов.
Можно ходить по горизонтали, вертикали и диагонали, использовать ячейку в одном и том же слове повторно нельзя.
Приведенный код, ищет слова длиной в семь букв, примерно за 5 секунд, если увеличить длину слова, то и время затраченное на поиск значительно вырастает, для 10-и букв, примерно 140 секунд, но и возможных вариантов в этом случае примерно 19 млн.
Подскажите пожалуйста, может для такого рода задач уже есть алгоритмы, а я тут огород горожу, ну или если не затруднит, укажите на не оптимальные части кода. Вариант, что всё отстой, не принимается

 import time
import random
#Прочитаем данные словаря
dictionary_list = set()
for i in open("E:/Project/List(2-10).txt").readlines():
    dictionary_list.add(i[:len(i)-1])   
    
#Сформируем список для дальнейшего использования
letters = [[0 for i in range(7)] for j in range(7)]
def prepare_words(i, j, word, words_list, used_cells):
    
    if letters[i][j] == 0 or len(word) == 7 or used_cells.get(letters[i][j] + str(i) + str(j)) == True:
        return
    
    word = word + letters[i][j]
    words_list.append(word)
        
    for x in 1,0,-1:
        for y in 1,0,-1:
            #used_cells - список уже использованых ячеек
            #перед рекурсивным вызовом добавляем текущее значение в ячейку, после - удаляем
            used_cells[letters[i][j] + str(i) + str(j)] = True
            prepare_words(i-x, j-y, word, words_list, used_cells)
            del used_cells[letters[i][j] + str(i) + str(j)]
                    
def filling_words_list():
    words_list = []
    for i in range(1,6):
        for j in range(1,6):
            used_cells = {}
            prepare_words(i, j, "", words_list, used_cells)   
    return words_list
def find_words():
    #Отметим время начала выполнения функции
    start_time = time.time()
    
    #Вводим строку для анализа, если строка будет пустая, то сгенерируем её
    string = input()
    if string == "":
        alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
        for i in range(0,25):
            mark = random.randint(0, 32)
            string += alphabet[mark]
    if len(string) != 25:
        print("Вы ввели не верное количество букв, повторите ввод еще раз.\nКоличество введенных знаков -", len(string))   
        find_words()
        return
    #Заполним ранее сформированную таблицу буквами из строки
    #крайние значения таблицы будут равны 0
    global letters
    n = 0
    for i in range(1,6):
        for j in range(1,6):
            letters[i][j] = string[n]
            n +=1
    #Сформируем и заполним таблицу возможных комбинаций из букв строки
    words_list = filling_words_list()
    #Найдем пересечения данных словаря комбинаций букв, полученный список сортируем по длине слова
    n = 0
    for i in sorted(set(words_list) & dictionary_list, key=len, reverse = True):   
        print(i)
        n +=1
        
    print("Найдено слов -", n, ", за", int((time.time() - start_time)), "секунд(ы)")    
  
    #Перезапустим функцию?
    anser = int(input("Хотите сыграть еще раз? (0 - нет, 1 - да)"))
    print("\n")
    if anser > 0:
        find_words()
    else:
        print("Game over")
        
find_words()

Python для новичков » Наследование в toplevel » Июнь 13, 2018 21:19:29

Здравствуйте, я хочу спросить можно ли вывести на toplevel атрибуты из родительского окна? И как сделать наследование. Например, мне нужно вывести матрицу self.lamtha и значение self.temp_max на дочернее окно. Буду очень благодарна за помощь
    def calculate(self, event):
        np.set_printoptions(formatter={'float': '{: 0.4f}'.format})
        self.lamtha = np.float32(np.arange(35).reshape(5, 7))
        self.mass_min = np.arange(7)    
        self.temp_max = 0
        self.mass_max = np.arange(7)
        self.p_a = np.append([],list(map(np.float32,[self.text_box_pa[i].get() for i in range(5)])))
        
        self.p_z = np.arange(35).reshape(5, 7)
        self.p_z1 = np.append([],list(map(np.float32,[self.text_box_pz1[j].get() for j in range(7)])))
        self.p_z2 = np.append([],list(map(np.float32,[self.text_box_pz2[j].get() for j in range(7)])))
        self.p_z3 = np.append([],list(map(np.float32,[self.text_box_pz3[j].get() for j in range(7)])))
        self.p_z4 = np.append([],list(map(np.float32,[self.text_box_pz4[j].get() for j in range(7)])))
        self.p_z5 = np.append([],list(map(np.float32,[self.text_box_pz5[j].get() for j in range(7)])))
        self.p_z = np.vstack((self.p_z1, self.p_z2, self.p_z3, self.p_z4, self.p_z5))
        self.X = np.append([],list(map(np.float32,[self.text_box_X[j].get() for j in range(7)])))
        self.Y = float(self.text_box_Y.get())
        
        return self.p_a, self.p_z, self.X, self.Y 
        for i in range(5):
            for j in range(7):
                self.lamtha[i][j] = self.X[j] / ((1 - self.p_z[i][j]) * self.p_a[i] * self.Y)  
                
                
        self.mass_min = np.min(self.lamtha, axis=0)           
        self.temp_max = self.mass_min[0]
        for j in range(7):
            if (self.mass_min[j] > self.temp_max) and (self.mass_min[j] < 1): 
                self.temp_max = self.mass_min[j]
        
        self.value = self.lamtha
        self.display(self.value)

Python для новичков » Python Aiohttp server: Как сделать response не из handler? » Июнь 13, 2018 15:49:03

Всем привет!
Копаюсь в aiohttp. Возник сабж знатокам aiohttp. Тривиальный код сервера с обработчиком (handler) запроса:

from aiohttp import web

async def hello(request):
return web.Response(text=“Hello, world”)

app = web.Application()
app.router.add_get('/', hello)

web.run_app(app)

В доках сказано, что обработчик всегда должен возвращать объект Response. Можно как-то ответить на запрос не из обработчика (в данном случае hello(request)), а например в другой корутине, передав например в глобальный массив контекст запроса?
Например, в node.js каждый запрос сопровождается двумя объектами, привязанными к контексту – request и response. Соответственно c response можно делать все что угодно и в любом месте сделать response.end(‘hello’).
Сорри если туплю, новичок пока еще.

Django » проблемы с select_related » Июнь 13, 2018 13:41:06

Ребят, привет.

есть проблема, конструкция ниже раньше работала,

qs = qs.select_related('user').extra(select={
‘track_title’: ‘select coalesce(title, display_title) from track where id=user_track.track_id’,
‘album_title’: ‘select coalesce(title, display_title) from album where id=user.album_id’,
})

до того как я добавил в модель MTM поле, вместо foreign key поля, это поле никак не влияет на данный запрос, но почему-то стала выпадать ошибка(хотя модель и таблица существуют и имеют необходимые поля):

missing FROM-clause entry for table “user”.

Не совсем понимаю куда дальше копать. Создается впечатление, как-будто django перестала видеть таблицу user

Python проекты » postgrestune - Python script to analyse your PostgreSQL database configuration » Июнь 12, 2018 17:38:43

Добрый день!
Переписываю Perl скрипт для анализа конфигурации Postgresql на Python.
https://github.com/patsevanton/postgrestune

Большую часть (думаю что 90%) оригинального скрипта переписал на Python.
Но малоиспользуемые опции я не написал в Python скрипте (например: .pgpass, ssh и другие).
Если кто-нибудь хочет попрактиковаться: проверить код, переписать в более правильном виде, добавить функциональность из Perl или из общих практик проверки PostgreSQL - милости прошу.
Присылайте Pull request.
Попробуйте проверить PostgreSQL на своих DEV, TEST базах данных.

Центр помощи » Отправка данных через форму. » Июнь 11, 2018 18:52:48

Задача такова:
Есть несколько сайтов, на сайтах есть формы и кнопка \отправить\. Мне нужно поочередно из текстового файла на каждый из этих сайтов в каждую форму отправить строку из текстового файла и “нажать” кнопку \отравить\. Потом вторую строку для каждого сайта и т.д. Желательно не открывая все это дело в браузере и не создавая множество окон.
В принципе ничего сложного. Но у меня ровно ноль знаний об html, запросах get\post и т.д. Я слабо представляю как это все происходит. Наткнулся на библиотеку urllib. Мне показалось что она подходит для этой задачи. Столкнулся с тем что 99% уроков и литературы по urllib описывает процесс парсинга и последующего анализа данных, что для моей задачи не подходит.

Что мне нужно изучить для выполнения задачи? Может посоветуете материалы какие по urllib? Или я не в том направлении копаю? (связки типа Selenium+Phantomjs не предлагать, для меня это темный лес)

Центр помощи » Помощь на зачете 09.06 » Июнь 8, 2018 19:39:57

Нужна помощь завтра на зачете по Python (09.06 в 9 утра)). Нужно будет решить 2 задачи: 1 задача будет вероятнее всего будет из “1.Процедурное программирование” (см. файл АиП_Список задач_18_примеры (1)), вторая задача будет либо из “2. Объектно-ориентированное программирование”, либо из “3.Функции и функциональное программирование.” (см. файл АиП_Список задач_18_примеры (1)). Рассмотрю ваши предложения, естественно оплата с моей стороны.

GUI » Зависание инициализации окна Tkinter либо Qt5 + Paramiko » Июнь 7, 2018 19:15:49

Добрый день.

Столкнулся с такой проблемой.
Через по SSH делаю подключение и выполняю команду “tailf test.log”

Далее читаю построчно stdout.

Команда print(line) выводит всё корректно, каждую новую появляющуюся строку в файле test.log

Но про попытке записать в виджет TEXT происходит зависание инициализации главного окна.

Если в цикле чтения выполнить stdout.close(), то инициализация проходит успешно и так же выводится первая строка в виджет Text, но, соответственно, дальше всё взрывается, так как файл закрыт.

Пробовал в цикле как сразу же line insert-ить, так и вначале line записывать в переменную, а потом вставлять переменную

Подскажите, как решить данную проблему? К примеру как возобновить чтение stdout в новой итерации, либо как тормозить цикл пока не пройдёт запись.

Появление логов идёт примерно со скоростью 1 строка в секунду, т.е. не льёт как из ведра.

Так же данную проблему воспроизвел на PyQT5. Поведение идентичное.

Так же попытался присвоить значение линии из stdout в переменную по средствам deepcopy(). Результатов нет.

Подскажите как быть?

 #python3
from tkinter import *
import paramiko
 
host = '127.0.0.1'
user = 'user'
secret = 'pass'
port = 22
def sendtext(event):
    val = entrytext.get()
    print(val)
def cancel():
    a=1
def logs():
    for line in stdout:
        print(line.encode('utf-8'))
        line1 = line.encode('utf-8')
        textlog.insert(END,line1)
 
#Вывод главного окна по центру экрана--------------------------------------------------    
def center(win):
    win.update_idletasks()
    width = win.winfo_width()
    frm_width = win.winfo_rootx() - win.winfo_x()
    win_width = width + 2 * frm_width
    height = win.winfo_height()
    titlebar_height = win.winfo_rooty() - win.winfo_y()
    win_height = height + titlebar_height + frm_width
    x = win.winfo_screenwidth() // 2 - win_width // 2
    y = win.winfo_screenheight() // 2 - win_height // 2
    win.geometry('{}x{}+{}+{}'.format(width, height, x, y))
    win.deiconify()
#--------------------------------------------------------------------------------------
#Основной блок. Инициализация окна-----------------------------------------------------
logwindow = Tk()
#logwindow.overrideredirect(True)
logwindow.geometry('1000x800')
center(logwindow)
scrollbar = Scrollbar(logwindow)
    
textlog = Text(logwindow, width=123,height=47, bg='#000000', fg='#ffffff')
textlog.grid(column=0,row=0,columnspan=2,padx=6, pady=6)
 
entrytext = Entry(logwindow,width=148,bg='#000000', fg='#ffffff')
entrytext.grid(column=0,row=1,padx=6, pady=6)
entrytext.bind('<Return>',sendtext)
 
cancelbutton = Button (logwindow, width = 10, height = 1, text = 'Отменить',command=cancel)
cancelbutton.grid(column=1,row=1,padx=6, pady=0)
 
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
client.connect(hostname=host, username=user, password=secret, port=port)
 
stdin, stdout, stderr = client.exec_command('cd /file/path/ && tailf test.log')
 
logs()
    
client.close()
    
logwindow.mainloop()