powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / python, tkinter, osm, не отображается в canvas
5 сообщений из 5, страница 1 из 1
python, tkinter, osm, не отображается в canvas
    #40064136
venza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
import tkinter
import sys
import math
import sqlite3 as lite
import requests


from PIL import Image, ImageTk
from io import BytesIO as sio

root = tkinter.Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w//2 # середина экрана
h = h//2
w = w - 200 # смещение от середины
h = h - 200
root.geometry('600x600+{}+{}'.format(w, h))

# создаем рабочую область
frame = tkinter.Frame(root)
frame.grid()

##################################изображение###############################################
def deg2num(lat_deg, lon_deg, zoom):
    lat_rad = math.radians(lat_deg)
    n = 2.0 ** zoom
    xtile = int((lon_deg + 180.0) / 360.0 * n)
    ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
    return (xtile, ytile)


def num2deg(xtile, ytile, zoom):
    n = 2.0 ** zoom
    lon_deg = xtile / n * 360.0 - 180.0
    lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
    lat_deg = math.degrees(lat_rad)
    return (lat_deg, lon_deg)


def getImageCluster(lat_deg, lon_deg, delta_lat, delta_long, zoom):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10"}
    smurl = r"http://a.tile.openstreetmap.org/{0}/{1}/{2}.png"
    xmin, ymax = deg2num(lat_deg, lon_deg, zoom)
    xmax, ymin = deg2num(lat_deg + delta_lat, lon_deg + delta_long, zoom)

    Cluster = Image.new('RGB', ((xmax - xmin + 1) * 256 - 1, (ymax - ymin + 1) * 256 - 1))
    canvas = tkinter.Canvas(root, height=(xmax - xmin + 1) * 256 - 1, width=(ymax - ymin + 1) * 256 - 1)
    for xtile in range(xmin, xmax + 1):
        for ytile in range(ymin, ymax + 1):
            try:
                imgurl = smurl.format(zoom, xtile, ytile)
                print("Opening: " + imgurl)
                imgstr = requests.get(imgurl, headers=headers)
                image = Image.open(sio(imgstr.content))
                photo = ImageTk.PhotoImage(image)
                image = canvas.create_image((xtile - xmin) * 256, (ytile - ymin) * 255, anchor='nw', image=photo)
                 #tile = Image.open(BytesIO(imgstr.content))
                 #Cluster.paste(tile, box = ((xtile-xmin)*256 ,  (ytile-ymin)*255))

            except:
                print("Couldn't download image")
                tile = None

    return Cluster
    
    canvas.grid(row=2, column=1)

if __name__ == '__main__':
    a = getImageCluster(38.5, -77.04, 0.02, 0.05, 13)
##################################изображение###############################################

##################################мышь###############################################
def b1(event):
    root.title("Левая кнопка мыши")

def b2(event):
    root.title("Средняя кнопка мыши")

def b3(event):
    root.title("Правая кнопка мыши")

def b4(event):
    root.title("Колесико мыши")

def move(event):
    x = event.x
    y = event.y
    s = "Движение мышью {}x{}".format(x, y)
    root.title(s)

root.bind('<Button-1>', b1)
root.bind('<Button-2>', b2)
root.bind('<Button-3>', b3)
root.bind('<MouseWheel>', b4)
root.bind('<Motion>', move)
##################################мышь###############################################


root.mainloop()


Не могу понять почему...
...
Рейтинг: 0 / 0
python, tkinter, osm, не отображается в canvas
    #40064940
iot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iot
Гость
с tk не работаю, исправил то что на первый взгляд неверно оформлено, попробуйте пожалуйста этот вариант

Код: 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.
import tkinter
import sys
import math
import sqlite3 as lite
import requests


from PIL import Image, ImageTk
from io import BytesIO

root = tkinter.Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w//2 # середина экрана
h = h//2
w = w - 200 # смещение от середины
h = h - 200
root.geometry('600x600+{}+{}'.format(w, h))

# создаем рабочую область
frame = tkinter.Frame(root)
frame.grid()

##################################изображение###############################################
def deg2num(lat_deg, lon_deg, zoom):
    lat_rad = math.radians(lat_deg)
    n = 2.0 ** zoom
    xtile = int((lon_deg + 180.0) / 360.0 * n)
    ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
    return (xtile, ytile)


def num2deg(xtile, ytile, zoom):
    n = 2.0 ** zoom
    lon_deg = xtile / n * 360.0 - 180.0
    lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
    lat_deg = math.degrees(lat_rad)
    return (lat_deg, lon_deg)


def getImageCluster(lat_deg, lon_deg, delta_lat, delta_long, zoom):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10"}
    smurl = r"http://a.tile.openstreetmap.org/{0}/{1}/{2}.png"
    xmin, ymax = deg2num(lat_deg, lon_deg, zoom)
    xmax, ymin = deg2num(lat_deg + delta_lat, lon_deg + delta_long, zoom)

    Cluster = Image.new('RGB', ((xmax - xmin + 1) * 256 - 1, (ymax - ymin + 1) * 256 - 1))
    canvas = tkinter.Canvas(root, height=(xmax - xmin + 1) * 256 - 1, width=(ymax - ymin + 1) * 256 - 1)
    for xtile in range(xmin, xmax + 1):
        for ytile in range(ymin, ymax + 1):
            try:
                imgurl = smurl.format(zoom, xtile, ytile)
                print("Opening: " + imgurl)
                imgstr = requests.get(imgurl, headers=headers)
                image = Image.open(BytesIO(imgstr.content))
                photo = ImageTk.PhotoImage(image)
                image = canvas.create_image((xtile - xmin) * 256, (ytile - ymin) * 255, anchor='nw', image=photo)
                 #tile = Image.open(BytesIO(imgstr.content))
                 #Cluster.paste(tile, box = ((xtile-xmin)*256 ,  (ytile-ymin)*255))

            except:
                print("Couldn't download image")
                tile = None

    return Cluster
    
    canvas.grid(row=2, column=1)


def b1(event):
    root.title("Левая кнопка мыши")

def b2(event):
    root.title("Средняя кнопка мыши")

def b3(event):
    root.title("Правая кнопка мыши")

def b4(event):
    root.title("Колесико мыши")

def move(event):
    x = event.x
    y = event.y
    s = "Движение мышью {}x{}".format(x, y)
    root.title(s)

root.bind('<Button-1>', b1)
root.bind('<Button-2>', b2)
root.bind('<Button-3>', b3)
root.bind('<MouseWheel>', b4)
root.bind('<Motion>', move)


if __name__ == '__main__':
    a = getImageCluster(38.5, -77.04, 0.02, 0.05, 13)
    root.mainloop()

...
Рейтинг: 0 / 0
python, tkinter, osm, не отображается в canvas
    #40064943
iot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iot
Гость
не заметил сразу, эти две строчки поменяйте местами

Код: python
1.
2.
3.
    return Cluster
    
    canvas.grid(row=2, column=1)
...
Рейтинг: 0 / 0
python, tkinter, osm, не отображается в canvas
    #40065868
venza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iot,

нет, не работает......
...
Рейтинг: 0 / 0
python, tkinter, osm, не отображается в canvas
    #40067332
iot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iot
Гость
возможно здесь проблема
Код: python
1.
photo = ImageTk.PhotoImage(image)


не пробовали без этого преобразования, напрмую image скормить канвасу?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / python, tkinter, osm, не отображается в canvas
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]