root.mainloop()
Его нельзя останавливать, иначе приложение зависнет. А блокирующий вызов x.join()
как раз это и делает.from functools import partial
import threading
import time
import tkinter as tk
from tkinter.ttk import Progressbar
import queue
def worker(q, r):
for i in range(100):
# Передаём в очередь текущее значение
q.put(i + 1)
# Генерируем событие
r.event_generate('<<Updated>>', when='tail')
# Спим для наглядности
time.sleep(0.1)
def on_update(event, q=None, pb=None):
# Получаем данные из очереди
pb['value'] = q.get()
# Создаём очередь для обмена данными между поткоами
q = queue.Queue()
# Создаём окно
root = tk.Tk()
progressbar = Progressbar(root, orient=tk.HORIZONTAL, length=100, mode='determinate')
progressbar.pack()
# "Передаём" в обработчик ссылки на очередь и progressbar
handler = partial(on_update, q=q, pb=progressbar)
# Регистрируем обработчик для события обновления progressbar'а
root.bind('<<Updated>>', handler)
# Создаём поток и передаём в него ссылки на очередь и окно
t = threading.Thread(target=worker, args=(q, root))
t.start()
root.mainloop()
//div[contains(@class, 'loginWindow')]//input[contains(@class, 'line-height-wide')][1]
contains
, т.е. ищет подстроку и могут появиться лишние совпадения, вроде loginWindow__title
. Есть еще функции starts-with
и ends-with
и остальные, не менее полезные штуки. Гуглите в сторону XPath. Два слэша означает: "где-то среди детей на любой глубине"const string loginFormPath = "//div[contains(@class, 'loginWindow')]";
const string inputFieldSelector = "input[contains(@class, 'line-height-wide')]";
const string nameFieldPath = loginFormPath + "//" + inputFieldSelector + "[1]";
const string passwordFieldPath = loginFormPath + "//" + inputFieldSelector + "[2]";
const string loginFormPath = ".loginWindow";
const string inputFieldSelector = "input.line-height-wide";
const string nameFieldPath = loginFormPath + " " + inputFieldSelector + ":nth-child(1)";
const string passwordFieldPath = loginFormPath + " " + inputFieldSelector + ":nth-child(2)";
iframe
, то на него необходимо явно переключиться, селекторы через эту границу работать не будут. driver.find_elements_by_css_selector('input.line-height-wide') //вернет вам два элемента.
driver.find_element_by_css_selector('button').click()
//*[@class="Wt-domRoot"]/div[2]/div/div/div/div/div[3]/div/div[2]/div/input[1]
//*[@class="Wt-domRoot"]/div[2]/div/div/div/div/div[3]/div/div[2]/div/input[2]
//*[@type="button"]
import java.math.BigInteger;
public class A {
public static void main(String[] args) {
BigInteger output_1 = generate(400732734464L, -74, 12);
BigInteger output_2 = generate(1641401281110016L, 100, 14);
System.out.println(output_1);
System.out.println(output_2);
}
public static BigInteger generate(long val1, int val2, int val3) {
return BigInteger.valueOf(val2 & 255)
.add(BigInteger.valueOf(val1))
.shiftLeft(val3);
}
}
In [4]: '1'.rjust(10, '0')
Out[4]: '0000000001'
In [5]: t1 = (2017, 10, 28)
In [6]: t2 = (2018, 10, 28)
In [7]: t1 < t2
Out[7]: True
def main():
popenList = {}
CLI_MENU.hello_banner()
while True:
command = input("CLI>: ")
command = CLI_MENU.analyze_command(command)
if command[0] == "add":
if len(command) > 1:
if CLI_MENU.is_ip_address(command[1]):
CLI_MENU.add_ip_to_monitoring(ip=command[1],popenlist=popenList)
else:
print("You should put ip address after word add.")
print("Print help and press Enter for more information.\n")
elif command[0] == "del":
if len(command) > 1:
CLI_MENU.stop_popen(ip=command[1], popenlist=popenList)
else:
print("You should put ip address after word del.")
print("Print help and press Enter for more information.\n")
elif command[0] == "import" and len(command) < 2:
ipexportlist = CLI_MENU.import_ip_from_file()
if len(ipexportlist) > 0 and (ipexportlist != "FileError"):
for ip in ipexportlist:
if CLI_MENU.is_ip_address(ip):
CLI_MENU.add_ip_to_monitoring(ip,popenList)
else: print(f"{ip} is not a correct ip, it will not be added to monitoring.")
elif ipexportlist == "FileError":
pass
else: print("File IPLIST.txt contains no IPs, nothing will be added to monitoring.")
elif command[0] == "show": CLI_MENU.show_ip_in_monitoring(popenlist=popenList)
elif command[0] == "help": CLI_MENU.give_help_menu()
elif command[0] == "exit": CLI_MENU.exit_program(popenlist=popenList)
elif command[0] == "FreeSpace": print()
else: print("Incorrect command, Please try again.\n")
mylist = list(range(1, 26)) # Делаем массив с элементами от 1 до 25
m = [] # Делаем пустой массив куда будем заносить результаты
for n in range(23):
sum_ = mylist[n] + mylist[n + 1] + mylist[n + 2] # Сумма 3 подряд идущих элементов от n
m.append(sum_ / 3) # Добавление результата
print(m)