Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50

Создание GUI через TKinter - ошибка

09.01.2024, 16:52. Показов 1862. Ответов 9

Студворк — интернет-сервис помощи студентам
Народ! Хелп есть скрипт pyton - вытягивает инфу с одного сайта - захотел я это все загнать в GUI через TKinter

PyCharm выдает еррор
usage: main.py [-h] [-main_url MAIN_URL] [-columns COLUMNS] [-rows ROWS]
image_id
main.py: error: the following arguments are required: image_id

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from functools import partial
import subprocess
import urllib.request
import os
 
def run_rurl(base_url, image_id, max_cols, max_rows):
    # ... (ваша функция run_rurl без изменений)
    try:
        os.makedirs(image_id)
    except OSError:
        pass
 
    found_rows, found_cols = -1, -1
 
    image_url_arr = image_id.split('-')
 
    # download tiles
    for y in range(0, max_rows):
        for x in range(0, max_cols):
            # download file
            url = "%s%s/%s/%s/%s/TileGroup0/3-%d-%d.jpg" % (base_url, image_url_arr[1],
                                                            image_url_arr[2], image_url_arr[3], image_id, x, y)
            # print(url)
            try:
                print("Downloading: %s " % url)
                urllib.request.urlretrieve(url, os.path.join(image_id, "tile_row%02d_column%02d.jpg" % (y, x)))
                if x > found_cols:
                    found_cols = x
                if y > found_rows:
                    found_rows = y
                print("Ok")
            except urllib.error.HTTPError as e:
                print("HTTP Error: %s" % e.code)
                # print(e.read())
 
    # join files
    found_rows += 1
    found_cols += 1
    # print("found_cols=%s found_rows=%s" % (found_cols, found_rows))
 
    if found_rows > 0 and found_cols > 0:
        subprocess.call(["montage", "-mode", "concatenate", "-tile", "%dx%d" % (found_cols, found_rows),
                         os.path.join(image_id, "tile_*.jpg"), os.path.join(image_id, "final_image.jpg")])
        print("Finished !")
    else:
        print("Images not found")
 
 
if __name__ == '__main__':
    import argparse
 
    parser = argparse.ArgumentParser(
        description="Downloads zoomify tiles and creates image.\n"
                    "Project page at: -",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("image_id", help="image id string, i.e.: 000-000-302-950")
    parser.add_argument("-main_url", help="main site url", default="http://site/")
    parser.add_argument("-columns", help="image tiles: number of columns", type=int, default=9)
    parser.add_argument("-rows", help="image tiles: number of rows", type=int, default=9)
    args = parser.parse_args()
 
    run_rurl(args.main_url, args.image_id, args.columns, args.rows)
 
def download_images(image_id, base_url, max_cols, max_rows):
    try:
        run_rurl(base_url, image_id, max_cols, max_rows)
        messagebox.showinfo("Success", "Images downloaded successfully!")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {str(e)}")
 
def on_download_button_click(entry, base_url, max_cols, max_rows):
    image_id = entry.get()
    if not image_id:
        messagebox.showwarning("Warning", "Please enter an image ID.")
    else:
        download_images(image_id, base_url, max_cols, max_rows)
 
def create_gui():
    root = tk.Tk()
    root.title("Image Downloader")
 
    main_url_label = ttk.Label(root, text="Main NCAP URL:")
    main_url_label.grid(row=0, column=0, padx=5, pady=5)
 
    base_url_entry = ttk.Entry(root, width=40)
    base_url_entry.insert(0, "http://site/")
    base_url_entry.grid(row=0, column=1, padx=5, pady=5)
 
    image_id_label = ttk.Label(root, text="Image ID:")
    image_id_label.grid(row=1, column=0, padx=5, pady=5)
 
    image_id_entry = ttk.Entry(root, width=40)
    image_id_entry.grid(row=1, column=1, padx=5, pady=5)
 
    columns_label = ttk.Label(root, text="Columns:")
    columns_label.grid(row=2, column=0, padx=5, pady=5)
 
    columns_entry = ttk.Entry(root, width=5)
    columns_entry.insert(0, "9")
    columns_entry.grid(row=2, column=1, padx=5, pady=5)
 
    rows_label = ttk.Label(root, text="Rows:")
    rows_label.grid(row=3, column=0, padx=5, pady=5)
 
    rows_entry = ttk.Entry(root, width=5)
    rows_entry.insert(0, "9")
    rows_entry.grid(row=3, column=1, padx=5, pady=5)
 
    download_button = ttk.Button(root, text="Download Images",
                                 command=partial(on_download_button_click, image_id_entry, base_url_entry.get(),
                                                 int(columns_entry.get()), int(rows_entry.get())))
    download_button.grid(row=4, column=0, columnspan=2, pady=10)
 
    root.mainloop()
 
if __name__ == '__main__':
    create_gui()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2024, 16:52
Ответы с готовыми решениями:

Запуск интерпретатора Python через CreateProcess и работа с ним через Pipe. Зависает при создание GUI функцией Tk()
Добрый день. Не знаю или в тот раздел запостил вопрос, но он скорее связан с Питоном, чем с созданием канала Pipе. Суть такая. Питон...

GUI tkinter textbox
Доброго времени суток всем. начал изучать tkinter, у меня windows, python 2.7 застопорился на трёх проблемах, если кто в силах, то...

GUI-приложение Tkinter с БД SQL
Прошу помощи в организации поиска и фильтрации. import sqlite3 # импорт модуля SQLite import tkinter as tk # импорт...

9
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
09.01.2024, 17:34
Цитата Сообщение от maximus_des Посмотреть сообщение
the following arguments are required: image_id
ты это прочел, перевел, понял?


Цитата Сообщение от maximus_des Посмотреть сообщение
parser.add_argument("image_id", help="image id string, i.e.: 000-000-302-950")
    parser.add_argument("-main_url", help="main site url", default="http://site/")
    parser.add_argument("-columns", help="image tiles: number of columns", type=int, default=9)
    parser.add_argument("-rows", help="image tiles: number of rows", type=int, default=9)
не сидел в раздумье над этими строками?
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50
09.01.2024, 18:23  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
Сообщение от maximus_des
the following arguments are required: image_id
ты это прочел, перевел, понял?
необходимы следующие аргументы - если честно я в коде не очень)))

Добавлено через 1 минуту
Цитата Сообщение от Welemir1 Посмотреть сообщение
parser.add_argument("image_id", help="image id string, i.e.: 000-000-302-950")
help="image id string - без нижнего подчеркивания?

Добавлено через 47 секунд
Цитата Сообщение от Welemir1 Посмотреть сообщение
parser.add_argument("image_id", help="image id string, i.e.: 000-000-302-950")
    parser.add_argument("-main_url", help="main site url", default="http://site/")
    parser.add_argument("-columns", help="image tiles: number of columns", type=int, default=9)
    parser.add_argument("-rows", help="image tiles: number of rows", type=int, default=9)
это строки из скрипта- она работает без проблем
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
09.01.2024, 19:02
Цитата Сообщение от maximus_des Посмотреть сообщение
это строки из скрипта- она работает без проблем
кто ОНА? это аргументы строки, с которыми ты должен запускать скрипт, ты почему их не использовал?
примеров то использования нет?

Цитата Сообщение от maximus_des Посмотреть сообщение
если честно я в коде не очень
в каком коде, тебе прямым текстом пишут что ждут аргумент имадж_ид, укажи его, как и все остальные необходимые аргументы
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50
09.01.2024, 23:46  [ТС]
сижу курю форумы так и не понял как это все прописать(исправить) - кто то пишет про необязательные аргрумнты , кто что надо что импортировать ....
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
10.01.2024, 09:43
maximus_des, мдеее... скжу совсем просто - ты вот скрипт скачал -как его использовать ты знаешь? код не нужно тут понимать, тут нужно понимать для чего нужен скрипт и с какими аргументами его запустить. Там, где ты его взял нет примеров запуска?
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50
10.01.2024, 12:08  [ТС]
неа нету , сам понял что его через cmd надо запускать

Добавлено через 2 часа 16 минут
крч - после долгих расспросов и корректировок, чат гпт оформил все как надо )))

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from functools import partial
import subprocess
import urllib.request
import os
import argparse
 
def run_rurl(base_url, image_id):
    # Фиксированные значения для количества столбцов и строк
    max_cols, max_rows = 9, 9
 
    try:
        os.makedirs(image_id)
    except OSError:
        pass
 
    found_rows, found_cols = -1, -1
 
    image_url_arr = image_id.split('-')
 
    for y in range(0, max_rows):
        for x in range(0, max_cols):
            url = "%s%s/%s/%s/%s/TileGroup0/3-%d-%d.jpg" % (base_url, image_url_arr[1],
                                                            image_url_arr[2], image_url_arr[3], image_id, x, y)
            try:
                print("Downloading: %s " % url)
                urllib.request.urlretrieve(url, os.path.join(image_id, "tile_row%02d_column%02d.jpg" % (y, x)))
                if x > found_cols:
                    found_cols = x
                if y > found_rows:
                    found_rows = y
                print("Ok")
            except urllib.error.HTTPError as e:
                print("HTTP Error: %s" % e.code)
 
    found_rows += 1
    found_cols += 1
 
    if found_rows > 0 and found_cols > 0:
        subprocess.call(["montage", "-mode", "concatenate", "-tile", "%dx%d" % (found_cols, found_rows),
                         os.path.join(image_id, "tile_*.jpg"), os.path.join(image_id, "final_image.jpg")])
        print("Finished !")
    else:
        print("Images not found")
 
def download_images(image_id, base_url):
    try:
        run_rurl(base_url, image_id)
        messagebox.showinfo("Success", "Images downloaded successfully!")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {str(e)}")
 
def on_download_button_click(entry, base_url):
    image_id = entry.get()
    if not image_id:
        messagebox.showwarning("Warning", "Please enter an image ID.")
    else:
        download_images(image_id, base_url)
 
def create_gui(base_url):
    root = tk.Tk()
    root.title("Image Downloader")
 
    main_url_label = ttk.Label(root, text="Main * URL:")
    main_url_label.grid(row=0, column=0, padx=5, pady=5)
 
    base_url_entry = ttk.Entry(root, width=40)
    base_url_entry.insert(0, base_url)
    base_url_entry.grid(row=0, column=1, padx=5, pady=5)
 
    image_id_label = ttk.Label(root, text="Image ID:")
    image_id_label.grid(row=1, column=0, padx=5, pady=5)
 
    image_id_entry = ttk.Entry(root, width=40)
    image_id_entry.grid(row=1, column=1, padx=5, pady=5)
 
    download_button = ttk.Button(root, text="Download Images",
                                 command=partial(on_download_button_click, image_id_entry, base_url_entry.get()))
    download_button.grid(row=2, column=0, columnspan=2, pady=10)
 
    root.mainloop()
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description="Downloads zoomify tiles and creates image.\n"
                    "Project page at: https://github.com/проект на гитхабе",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("-main_url", help="main NCAP url", default="http://название сайта")
    parser.add_argument("-image_id", help="image id string, i.e.: NCAP-000-000-302-950")
 
    args = parser.parse_args()
 
    if args.image_id:
        download_images(args.image_id, args.main_url)
    else:
        create_gui(args.main_url)
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
10.01.2024, 12:20
Цитата Сообщение от maximus_des Посмотреть сообщение
вытягивает инфу с одного сайта
а, что за сайт?
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50
28.12.2024, 17:25  [ТС]
Господа! Вынужден возобновить тему. МОжет кто подскажет . Скрипт а позже рабочая программа скачивала отдельные фрагменты аэрофотоснимков с сайта https://ncap.org.uk/ - позже сайт стал доступен только через ВПН , я установил ТунельБэар ВПН - все скачивалось норм. Но вот с недавних пор и через впн не качает - кт оможет подсказат ьв чем проблема?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from functools import partial
import subprocess
import urllib.request
import os
import argparse
 
def run_rurl(base_url, image_id):
    # Фиксированные значения для количества столбцов и строк
    max_cols, max_rows = 9, 9
 
    try:
        os.makedirs(image_id)
    except OSError:
        pass
 
    found_rows, found_cols = -1, -1
 
    image_url_arr = image_id.split('-')
 
    for y in range(0, max_rows):
        for x in range(0, max_cols):
            url = "%s%s/%s/%s/%s/TileGroup0/3-%d-%d.jpg" % (base_url, image_url_arr[1],
                                                            image_url_arr[2], image_url_arr[3], image_id, x, y)
            try:
                print("Downloading: %s " % url)
                urllib.request.urlretrieve(url, os.path.join(image_id, "tile_row%02d_column%02d.jpg" % (y, x)))
                if x > found_cols:
                    found_cols = x
                if y > found_rows:
                    found_rows = y
                print("Ok")
            except urllib.error.HTTPError as e:
                print("HTTP Error: %s" % e.code)
 
    found_rows += 1
    found_cols += 1
 
    if found_rows > 0 and found_cols > 0:
        subprocess.call(["montage", "-mode", "concatenate", "-tile", "%dx%d" % (found_cols, found_rows),
                         os.path.join(image_id, "tile_*.jpg"), os.path.join(image_id, "final_image.jpg")])
        print("Finished !")
    else:
        print("Images not found")
 
def download_images(image_id, base_url):
    try:
        run_rurl(base_url, image_id)
        messagebox.showinfo("Success", "Images downloaded successfully!")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {str(e)}")
 
def on_download_button_click(entry, base_url):
    image_id = entry.get()
    if not image_id:
        messagebox.showwarning("Warning", "Please enter an image ID.")
    else:
        download_images(image_id, base_url)
 
def create_gui(base_url):
    root = tk.Tk()
    root.title("Image Downloader")
 
    main_url_label = ttk.Label(root, text="Main * URL:")
    main_url_label.grid(row=0, column=0, padx=5, pady=5)
 
    base_url_entry = ttk.Entry(root, width=40)
    base_url_entry.insert(0, base_url)
    base_url_entry.grid(row=0, column=1, padx=5, pady=5)
 
    image_id_label = ttk.Label(root, text="Image ID:")
    image_id_label.grid(row=1, column=0, padx=5, pady=5)
 
    image_id_entry = ttk.Entry(root, width=40)
    image_id_entry.grid(row=1, column=1, padx=5, pady=5)
 
    download_button = ttk.Button(root, text="Download Images",
                                 command=partial(on_download_button_click, image_id_entry, base_url_entry.get()))
    download_button.grid(row=2, column=0, columnspan=2, pady=10)
 
    root.mainloop()
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description="Downloads zoomify tiles and creates image.\n"
                    "Project page at: https://github.com/проект на гитхабе",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("-main_url", help="main NCAP url", default="http://ncap.org.uk/sites/all/libraries/zoomify512/")
    parser.add_argument("-image_id", help="image id string, i.e.: NCAP-000-000-302-950")
 
    args = parser.parse_args()
 
    if args.image_id:
        download_images(args.image_id, args.main_url)
    else:
        create_gui(args.main_url)
Добавлено через 1 минуту
возможно на сайте изменился путь? вот полная ссылка для примера кусочка фрэйма

https://ncap.org.uk/sites/all/... /3-3-3.jpg
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50
31.12.2024, 08:50  [ТС]
Похоже, они обновили свою систему, и теперь для каждого изображения нужен уникальный хеш из 64 символов.

Вот пример нового URL:
https://ncap.org.uk/sites/all/libraries/zoomify.images/<HASH>/NCAP-000-000-000-000/TileGroup0/0-0-0.jpg

Возможно, можно провести обратную разработку этого хеша, зная предыдущие части URL?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2024, 08:50
Помогаю со студенческими работами здесь

GUI, Tkinter, canvas and frame
Привет, я только начинаю это изучать, так что вопрос наверное глупый. В чём разница между canvas и frame?:sigh:

Phyton gui с использованием Tkinter
Можете помочь задачей. Необходимо найти приблизительное значение e и pi с помощью формул e=1+1/1!+1/2!+1/3!+... ...

Python, модуль tkinter GUI
Здравствуйте, помогите пожалуйста не получается выполнить задание Задание: Напишите приложение с меню, содержащим два пункта: Color и...

Python, tkinter, переменные в GUI
Здраствуйте, помогите пожалуйста. Задание: Напишите скрипт, как в примере с флажками; в отличии от примера значения ассоциированных...

tkinter корректно запустить GUI
Здравствуйте! В Питоне совсем недавно и хочется автоматизировать рутинные задачи со звуковыми файлами. В данном случае не понимаю почему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru