0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 50

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

09.01.2024, 16:52. Показов 1953. Ответов 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
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 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
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 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
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru