Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / python, tkinter, osm, не отображается в canvas / 5 сообщений из 5, страница 1 из 1
20.04.2021, 12:41
    #40064136
venza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
python, tkinter, osm, не отображается в canvas
Код: 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
22.04.2021, 22:34
    #40064940
iot
iot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
python, tkinter, osm, не отображается в canvas
с 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
22.04.2021, 22:38
    #40064943
iot
iot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
python, tkinter, osm, не отображается в canvas
не заметил сразу, эти две строчки поменяйте местами

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

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


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


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