Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 15.08.2019
Сообщений: 5

Нужно создать второе окно и прикрепить к нему Canvas

24.08.2019, 11:22. Показов 2513. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот мой код:
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
from tkinter import *
from tkinter.ttk import Radiobutton
from tkinter import messagebox
 
def selected(): 
    s = select.get() 
    if(s == 1)&(val != ""): 
        buildHorisontalHistogram()
    elif(s == 2)&(val != ""): 
        buildVerticalHistogram()
    else: 
         messagebox.showinfo('Ошибка','Вы не выбрали расположение гистограммы')
def value(): 
    num = golist(val.get())
    columnHeight = []
    omax = max(num)
    persent = omax / 100
    for i in range(0,len(num)):
        columnHeight.append(int(num[i] / persent))
    return columnHeight
             
def buildVerticalHistogram(): 
    maxWidth = spin.get()
    print(value()) 
 
    
 
    
def buildHorisontalHistogram():
    maxheight = spin.get()
    print(value())
    
 
   
def golist(num):
    words = []
    resl = []
    word = ""
    for i in range(0,len(num)):
        if(num[i] != ','):
            word += num[i]
        else:
            if(word != ""):
                words.append(word)
                word = ""
    if(word != ""):
        words += word
    for i in range(0,len(words)):
        resl.append(int(words[i]))
    return resl        
                       
   
 
             
window = Tk()
window.geometry('400x400')
window.title("Create your own histogram")
 
select = IntVar()
lbl = Label(window, text ="Выберите расположение гистограммы")
lbl.grid(column = 0, row = 0)
rad1 = Radiobutton(text="Горизантальное", value=1, variable = select)  
rad2 = Radiobutton(text="Вертикальное", value=2, variable = select)
rad1.grid(column = 0, row = 1)
rad2.grid(column = 1, row = 1)
lbl1 = Label(window, text='Выберите максимальную высоту гистограммы')
lbl1.grid(column = 0, row = 2)
spin = Spinbox(window, from_=5, to=50, width=5)  
spin.grid(column=1, row=2)
lbl2 = Label(window, text='Введите значения стобцов через запятую')
lbl2.grid(column = 0, row = 3)
val = Entry(window,width = 30)
val.grid(column = 0, row = 4)
btn = Button(window, text='Готово', command=selected)
btn.place(relx = .5, rely = .5, anchor="c")
 
 
 
 
 
window.mainloop()
Нужно через методы buildHorisontalHistogram и buildVerticalHistogram вызвать второе окно и прикрепить к нему Canvas
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2019, 11:22
Ответы с готовыми решениями:

Есть код в формате .postsetup, его нужно извлечь и прикрепить к нему дизайн
В общем, есть код в формате .postsetup, его нужно извлечь и прикрепить к нему дизайн, кто может помочь?) или как это сделать?

Как создать второе окно
Всем привет хотел спросить в JavaFx как создать второе окно которое показывает тоже что и первое окно.Я создал игру оно работает но я хочу...

Как правильно создать второе окно?
Наверное я плохо искал, но понятного решения не нашел.Создаю вторую форму так же, как и создавал первую Справа в обозревателе с помощью...

6
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
24.08.2019, 11:49
Цитата Сообщение от Даниил331 Посмотреть сообщение
вызвать второе окно и прикрепить к нему Canvas
Объясните толком, что вы хотите сделать
0
0 / 0 / 0
Регистрация: 15.08.2019
Сообщений: 5
24.08.2019, 11:54  [ТС]
мне нужно когда все параметры будут заданы в первом окне сделать с ними вычисления(их я делаю в функции value),потом по вычисленным данным отстроить фигуры в новом окне
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
24.08.2019, 12:27
Вроде такого

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from tkinter import *
 
def create_window():
    window = Toplevel(root)
    c = Canvas(window, width=200, height=200, bg='white')
    c.pack()
    c.create_line(10, 10, 190, 50)
    c.create_line(100, 180, 100, 60, fill='green',
                    width=5, arrow=LAST, dash=(10,2),
                    activefill='lightgreen',
                    arrowshape="10 20 10")
 
root = Tk()
b = Button(root, text="Создать новое окно", command=create_window)
b.pack()
 
root.mainloop()
0
0 / 0 / 0
Регистрация: 15.08.2019
Сообщений: 5
24.08.2019, 12:57  [ТС]
Сделал эту функцию как у вас и вызвал её через функцию builVerticalHistogram и компилятор выдал такую ошибку:

cannot use geometry manager grid inside . which already has slaves managed by pack

скорее всего он ругается на то что я использовал до этого метод grid

переписанный код:

from tkinter import *
from tkinter.ttk import Radiobutton
from tkinter import messagebox
# проверка все ли параметры введены
def selected():
s = select.get()
if(s == 1)&(val != ""):
buildHorisontalHistogram()
elif(s == 2)&(val != ""):
buildVerticalHistogram()
else:
messagebox.showinfo('Ошибка','Вы не выбрали расположение гистограммы')
# ищём размеры фигур
def value():
num = golist(val.get())
columnHeight = []
omax = max(num)
persent = omax / 100
for i in range(0,len(num)):
columnHeight.append(int(num[i] / persent))
return columnHeight

# метод создания вертикальной гистограммы(недописан)
def buildVerticalHistogram():
maxWidth = spin.get()
print(value())
create_Histogram()



# метод создания горизонтальной гистограммы(недописан)
def buildHorisontalHistogram():
maxheight = spin.get()
print(value())


# преобразую строку полученныую при вводе в список
def golist(num):
words = []
resl = []
word = ""
for i in range(0,len(num)):
if(num[i] != ','):
word += num[i]
else:
if(word != ""):
words.append(word)
word = ""
if(word != ""):
words += word
for i in range(0,len(words)):
resl.append(int(words[i]))
return resl
# написанная вами функция
def create_Histogram():
window = Toplevel(root)
c = Canvas(window, width=200, height=200, bg='white')
c.pack()
c.create_line(10, 10, 190, 50)
c.create_line(100, 180, 100, 60, fill='green',
width=5, arrow=LAST, dash=(10,2),
activefill='lightgreen',
arrowshape="10 20 10")


# создаю окно 1 и оформляю его
root = Tk()
root.geometry('400x400')
root.title("Create your own histogram")
# забираю значение из SpinBox
select = IntVar()
# оформляю окно1
lbl = Label(root, text ="Выберите расположение гистограммы")
lbl.grid(column = 0, row = 0)
# кнопки для выбора типа гистограммы
rad1 = Radiobutton(text="Горизантальное", value=1, variable = select)
rad2 = Radiobutton(text="Вертикальное", value=2, variable = select)
rad1.grid(column = 0, row = 1)
rad2.grid(column = 1, row = 1)
lbl1 = Label(root, text='Выберите максимальную высоту гистограммы')
lbl1.grid(column = 0, row = 2)
# кнопки для выбора максимальной высоты/ширины гистограммы
spin = Spinbox(root, from_=5, to=50, width=5)
spin.grid(column=1, row=2)
# заполняю окно 1
lbl2 = Label(root, text='Введите значения стобцов через запятую')
lbl2.grid(column = 0, row = 3)
# поле для ввода данных
val = Entry(root,width = 30)
val.grid(column = 0, row = 4)
# завершение ввода данных и переход к построению
btn = Button(root, text='Готово', command=selected)
btn.place(relx = .5, rely = .5, anchor="c")





root.mainloop()
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
24.08.2019, 13:02
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
from tkinter import *
from tkinter.ttk import Radiobutton
from tkinter import messagebox
 
def create_window():
    wind = Toplevel(window)
    c = Canvas(wind, width=200, height=200, bg='white')
    c.pack()
    c.create_line(10, 10, 190, 50)
    c.create_line(100, 180, 100, 60, fill='green',
                    width=5, arrow=LAST, dash=(10,2),
                    activefill='lightgreen',
                    arrowshape="10 20 10")
 
def selected(): 
    s = select.get() 
    if(s == 1)&(val != ""): 
        buildHorisontalHistogram()
        s = select.get() 
    elif(s == 2)&(val != ""): 
        buildVerticalHistogram()
    else: 
        messagebox.showinfo('Ошибка','Вы не выбрали расположение гистограммы')
    
def value(): 
    num = golist(val.get())
    columnHeight = []
    omax = max(num)
    persent = omax / 100
    for i in range(0,len(num)):
        columnHeight.append(int(num[i] / persent))
    return columnHeight
 
def buildVerticalHistogram(): 
    # maxWidth = spin.get()
    # print(value()) 
    create_window()
 
def buildHorisontalHistogram():
    # maxheight = spin.get()
    # print(value())
    create_window()
 
 
def golist(num):
    words = []
    resl = []
    word = ""
    for i in range(0,len(num)):
        if(num[i] != ','):
            word += num[i]
        else:
            if(word != ""):
                words.append(word)
                word = ""
            if(word != ""):
                words += word
            for i in range(0,len(words)):
                resl.append(int(words[i]))
    return resl 
 
 
window = Tk()
window.geometry('400x400')
window.title("Create your own histogram")
 
select = IntVar()
lbl = Label(window, text ="Выберите расположение гистограммы")
lbl.grid(column = 0, row = 0)
rad1 = Radiobutton(text="Горизантальное", value=1, variable = select) 
rad2 = Radiobutton(text="Вертикальное", value=2, variable = select)
rad1.grid(column = 0, row = 1)
rad2.grid(column = 1, row = 1)
lbl1 = Label(window, text='Выберите максимальную высоту гистограммы')
lbl1.grid(column = 0, row = 2)
spin = Spinbox(window, from_=5, to=50, width=5) 
spin.grid(column=1, row=2)
lbl2 = Label(window, text='Введите значения стобцов через запятую')
lbl2.grid(column = 0, row = 3)
val = Entry(window,width = 30)
val.grid(column = 0, row = 4)
btn = Button(window, text='Готово', command=selected)
btn.place(relx = .5, rely = .5, anchor="c")
 
 
window.mainloop()
1
0 / 0 / 0
Регистрация: 15.08.2019
Сообщений: 5
24.08.2019, 13:27  [ТС]
Ваш код выдаёт такую же ошибку:
cannot use geometry manager grid inside . which already has slaves managed by pack

Добавлено через 15 минут
Всё переменил метод grid на pack и всё заработало, спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.08.2019, 13:27
Помогаю со студенческими работами здесь

Создать второе независимое окно в котором можно настраивать рисунок
Как при наличии окна GraphABC с неким рисунком создать второе независимое окно в котором можно настраивать рисунок? Так-то все получается...

Canvas растягивается на все окно, а нужно справа от холста оставить StackPanel
<Window> <Grid> <DockPanel> <Canvas /> <StackPanel Orientation="Vertical"> ...

Как создать второе окно по центру того из которого было оно создано
Как создать второе окно по центру того из которого было оно создано.Подскажите пожалуйста.

Прикрепить textview/button на canvas
Добрый день. Столкнулся с проблемой размещения элементов управления на Canvas'e. Если с кнопкой идея есть(выделить кусочек на Canvas'e...

как считать имя передаваемой переменной формы, либо прикрепить к нему value в image
Задача: есть картинки кнопок в форме через input type=image. Нужно передать конкретное значение переменной для выбранной кнопки-картинки: ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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