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

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

24.08.2019, 11:22. Показов 2556. Ответов 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,302
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,302
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,302
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
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
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] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 15.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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru