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

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

24.08.2019, 11:22. Показов 2517. Ответов 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,301
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,301
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,301
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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru