Canvas python убрать рамку

Как удалить светло-серая рамка вокруг моего виджета Canvas?

Я уже возился с виджетами Tkinter Canvas , чтобы увидеть, могу ли я сделать какие-то эстетически привлекательные виджеты, и у меня есть несколько вопросов.

Во-первых, почему есть светло-серая граница вокруг моего виджета Canvas и как я могу избавиться от него?

Во-вторых, почему верхняя левая позиция в холсте (2,2)? Похоже, что это должно быть (0,0).

from Tkinter import * master = Tk() master.configure(bg='black') master.wm_attributes("-topmost", 1) w = Canvas(master, width=150, height=40, bd=0,relief='ridge',) w.pack() color = 100 x0 = 2 y0 = 2 x1 = 151 y1 = 2 while y0 < 20 : r = color g = color b = color rgb = r, g, b Hex = '#%02x%02x%02x' % rgb w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1) color = color - 2 y0 = y0 + 1 y1 = y1 + 1 color = 10 while y0 < 40 : r = color g = color b = color rgb = r, g, b Hex = '#%02x%02x%02x' % rgb w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1) color = color + 4 y0 = y0 + 1 y1 = y1 + 1 mainloop() 

python tkinter tkinter-canvas

2 ответа

33 Решение T.P. [2010-11-30 09:31:00]

Я смог устранить пограничный артефакт с небольшими изменениями в опубликованном источнике.

w = Canvas(master, width=150, height=40, bd=0, relief='ridge') w.pack() 
w = Canvas(master, width=150, height=40, bd=0, highlightthickness=0, relief='ridge') w.pack() 
x0 = 2 y0 = 2 x1 = 151 y1 = 2 
x0 = 0 y0 = 0 x1 = 150 y1 = 0 

Интересно, что атрибут "borderwidth" не повлиял, но я оставил его в FAQ.

Запуск w.config() сразу после утверждения инициализации Canvas показал, что значения по умолчанию 2 для highlightthickness и 0 для border width .

Короткий ответ: Canvas имеет два компонента, которые влияют на ребра: атрибут border ( borderwidth ) и кольцо выделения ( highlightthickness ).

Если у вас ширина рамки и нулевая толщина подсветки, координаты холста начнутся с 0,0. В противном случае эти два компонента холста нарушают координатное пространство.

То, что я чаще всего делаю, - установить эти атрибуты на ноль. Затем, если я действительно хочу границу, я поставлю этот холст внутри рамки и дам рамке рамку.

Источник

Как убрать светло-серую рамку вокруг моего виджета Canvas?

Я уже возился с виджетами Tkinter Canvas , чтобы увидеть, могу ли я сделать какие-то эстетически привлекательные виджеты, и у меня есть несколько вопросов. Во-первых, почему есть светло-серая граница вокруг моего виджета Canvas и как я могу избавиться от него? Во-вторых, почему верхняя левая позиция в холсте (2,2)? Похоже, что это должно быть (0,0). Мой текущий script:

from Tkinter import * master = Tk() master.configure(bg='black') master.wm_attributes("-topmost", 1) w = Canvas(master, width=150, height=40, bd=0,relief='ridge',) w.pack() color = 100 x0 = 2 y0 = 2 x1 = 151 y1 = 2 while y0 < 20 : r = color g = color b = color rgb = r, g, b Hex = '#%02x%02x%02x' % rgb w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1) color = color - 2 y0 = y0 + 1 y1 = y1 + 1 color = 10 while y0 < 40 : r = color g = color b = color rgb = r, g, b Hex = '#%02x%02x%02x' % rgb w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1) color = color + 4 y0 = y0 + 1 y1 = y1 + 1 mainloop() 

2 ответа

Раздел 6.8 Почему холст не начинается с 0,0? Часто задаваемые вопросы об использовании Tk описывает явление. Я смог устранить пограничный артефакт с небольшими изменениями в опубликованном источнике. Измените это:

w = Canvas(master, width=150, height=40, bd=0, relief='ridge') w.pack() 
w = Canvas(master, width=150, height=40, bd=0, highlightthickness=0, relief='ridge') w.pack() 
x0 = 2 y0 = 2 x1 = 151 y1 = 2 
x0 = 0 y0 = 0 x1 = 150 y1 = 0 

Интересно, что атрибут "borderwidth" не повлиял, но я оставил его в FAQ. Запуск w.config() сразу после утверждения инициализации Canvas показал, что значения по умолчанию 2 для highlightthickness и 0 для border width .

Конфигурация borderwidth не имела значения, потому что исходный код уже устанавливал ширину границы на ноль с опцией bd , которая является синонимом для borderwidth

Что вы подразумеваете под "Все индикаторы делают вывод, что Tk Canvas в некоторой степени скрыт"? Холст потрясающий виджет, какие показатели говорят, что он не работает?

@Bryan - Для меня ни опция borderwidth, ни ее сокращенная форма не имеют значения для этого конкретного случая. Установка только параметра highlightthickness удаляет 2-пиксельную серую рамку. Чтобы проверить, я удалил атрибуты borderwidth и highlightthickness и запустил w.config (). «highlightthickness» по умолчанию равно 2, а «borderwidth» по умолчанию равно 0. Есть ли вероятность, что значения по умолчанию зависят от платформы? Во всяком случае, я отредактировал ответ, чтобы упростить. И да, Canvas - отличный виджет. Убрано и первое утверждение, чтобы никого не вводить в заблуждение.

да, значения по умолчанию могут быть не только платформенными, но и оконными менеджерами и пользователями.

Ваш ответ дал мне причину моей проблемы: codegolf.stackexchange.com/questions/85141/… - я наконец-то обнаружил происхождение «глупого поля»; атрибут highlightthickness для canvas по умолчанию равен 2 (вместо 0)

Короткий ответ: Canvas имеет два компонента, которые влияют на ребра: атрибут border ( borderwidth ) и кольцо выделения ( highlightthickness ).

Если у вас ширина рамки и нулевая толщина подсветки, координаты холста начнутся с 0,0. В противном случае эти два компонента холста нарушают координатное пространство.

То, что я чаще всего делаю, - установить эти атрибуты на ноль. Затем, если я действительно хочу границу, я поставлю этот холст внутри рамки и дам рамке рамку.

Ещё вопросы

  • 0 Объект, два выпадающих списка, ng-options и привязка значения
  • 0 Выберите двойным щелчком или одной буквой div, который делает фокус ввода
  • 1 Как определить, является ли вертикальная полоса прокрутки Grid Control видимой или скрытой. Дев экспресс
  • 0 Управление зависимостями C ++ от нескольких проектов
  • 0 Преобразовать код GIF в изображение GIF или вывести в файл?
  • 1 unauthorized_client: клиент не авторизован для получения токенов доступа с помощью этого метода
  • 1 Конвертировать категорические признаки (Enum) в H2o в Boolean
  • 1 Строки с одинаковым содержимым не равны?
  • 0 Меню CSS не работает должным образом, если я размещаю слайд-шоу с изображениями
  • 0 jquery $ .totalStorage - удалить все ключи
  • 1 Конвертировать массив .Net int в Java.Lang.Object
  • 1 Android двухстороннее связывание данных с onclick () не работает
  • 0 Yii2 RBAC Ошибка DbManager Вызов функции-члена getRole () со значением NULL
  • 0 Mysql запрос оптимизации или сократить запрос
  • 0 Слайд-шоу изображений Jquery не начинается с начала
  • 0 Фоновое изображение не работает
  • 0 Как сделать так, чтобы изображение всегда загружалось в центре страницы?
  • 1 Импорт .txt файла с запятыми и без пробелов между числами
  • 0 Использование функции в качестве параметра в контроллере
  • 0 Показать разделы на основе значения флажка в jQuery (SharePoint 2010)
  • 1 ModuleNotFoundError: нет модуля с именем 'Quartz'
  • 0 Элементы управления JQuery UI не работают после загрузки jquery.js после jquery.ui.js
  • 0 Ошибка JPA при странном сообщении
  • 0 Jquery - возвращение значения из массива
  • 1 Является ли View или ViewModel ответственным за преобразование данных из модели, представляемой в пользовательском интерфейсе?
  • 0 Часть указателей на интерфейс для абстракций запросов MySQL
  • 1 Создать открытую переменную для конкретной формы
  • 0 Отладка в Visual Studio - могу ли я увидеть код библиотеки Intel Compiler?
  • 0 C ++, используя операторы if-else для вычисления sin и cos
  • 0 cmake, уточнение по include_directories
  • 1 Панды слияния и суммирования данных
  • 0 Оператор SELECT, вызванный из асинктической задачи HTTP post, терпит неудачу ТОЛЬКО на устройстве galaxy s4
  • 0 Изотоп - Адаптивный макет 4,3,2,1
  • 0 JQUERY установить clearInterval через время
  • 1 Windows Phone - любой шаблон дизайна формы?
  • 1 Кнопка Windows Forms: изображение или ImageList + ImageIndex?
  • 1 Как заменить прозрачный цвет в подушку
  • 1 Как можно увеличить размер значков на вкладке Элементы?
  • 0 Записать новые данные в переменную javascript и проанализировать JSON
  • 0 Повысьте некопируемую ошибку при создании карт STXXL
  • 0 Неопределенная ссылка - CodeBlocks
  • 1 Синтаксическая ошибка при реализации API Google Map Javascript с помощью Smarty
  • 1 Получить данные из строки сетки ExtJS, используя селен
  • 1 Как изменить заголовок в окне поиска?
  • 1 Обнаружение попадания между 2 движущимися объектами в CreateJS
  • 0 Выделение локальных переменных в стеке и использование арифметики с указателями
  • 0 Точность чтения в файле
  • 1 Как написать с функцией 2+ параметров в стиле без точек
  • 0 как проверить, существует ли имя пользователя в angularjs
  • 1 Передать данные в pug с помощью pug-html-loader (не может прочитать свойство undefined)

Источник

Хочу убрать рамку (frame) в tkinter python

Как в python tkinter при выводе содержимого entry в консоль убрать ".!"?
from tkinter import * from tkinter import messagebox def show(): print(entry) .

Создание подкласса Frame-а tkinter
В учебнике М.Доусона есть вот такой код from tkinter import * root=Tk() root.geaometry("100x50").

tkinter как удалить frame
Доброго времени суток. Помогите с проблемой Как удалить динамически создаваемый фрейм? Вот код.

GUI, Tkinter, canvas and frame
Привет, я только начинаю это изучать, так что вопрос наверное глупый. В чём разница между canvas и.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
from tkinter import * class Block: def __init__(self, master): self.f = LabelFrame(None) f = self.f self.e = Entry(master, width=50) self.b = Button(f, text="+").pack(side = LEFT) self.b1 = Button(f, text="-").pack(side = LEFT) self.b2 = Button(f, text="*").pack(side = LEFT) self.b3 = Button(f, text="/").pack(side = LEFT) self.l = Label(master, fg='black', width=20) self.e.pack() self.f.pack() self.l.pack() root = Tk() root.wait_visibility(root) root.wm_attributes('-alpha',0.3) root.mainloop() first_block = Block(root) root.mainloop()

Если вы присмотритесь к скриншоту, то увидите , что кнопки находятся в самой рамке, а рамка выглядит не эстетично.

Контекстное меню и вывод текста на рамку (frame)
Имеется 6 рамок (frame) и необходимо чтобы при нажатии правой кнопкой мыши на любое место в.

Написать функцию frame, выводящую на экран рамку
6. Написать функцию frame, выводящую на экран рамку. Как параметры функции должны передаваться .

Виджеты tkinter и tkinter.ttk (используется Python 3.5.2)
1) Проблема с виджетом Scale (ползунок) модуля tkinter. Я создал ползунок от 1 до 50 (как на первой.

Написать функцию FRAME, которая выводит на экран рамку
3 задание Даны матрицы: А размером m*k и В размером k*n.Получить матрицуС=A*В. 2 задания.

убрать рамку
подскажите как убрать рамку в этом коде.. <CENTER> <INPUT name=s1 size=100 ><br>

Убрать рамку
Как убрать рамку только у инпут текст?

Источник

Python: удаление рамки TKinter

Основываясь на показанном вами отступе, кажется, что вы написали метод как вспомогательный метод для метода init . self.itemFrame и removeB должны быть с отступом и не на том же уровне, что и метод под ними. Это может объяснить, почему вы не можете уничтожить кадр.

4 ответа

Чтобы удалить, вызовите либо frm.pack_forget() , либо frm.grid_forget() в зависимости от того, был ли кадр упакован или скопирован.

Затем вызовите frm.destroy() , если вы не собираетесь использовать его снова, или удерживайте его в ссылке, а затем переупакуйте или перезагрузите, когда хотите снова отобразить его.

Наконец, pack_forget заставит его исчезнуть! У меня все еще есть проблема с методом уничтожения. Я получаю сообщение об ошибке, которое вы видите в вопросе

Стивен Румбальски: Я получил ту же ошибку с помощью строчной буквы "destroy ()". На самом деле код работает только с pack_forget. Но мне нужно уничтожить, чтобы очистить память, я думаю ..

del ничего не удаляет. del something просто удаляет something из локальной области. И хотя если something была единственной ссылкой на объект, она может позволить объекту, который он собирает в будущем мусор, даже не думайте об использовании del для удаления объектов. А так как self - это просто нормальные переменные, del self ничего не делает, за исключением того, что, конечно, останавливает остальную часть метода от доступа к экземпляру (так что в конце метода это действительно как pass ).

Точный способ удаления виджета из графического интерфейса зависит от того, какой менеджер геометрии вы используете. Если вы использовали .grid() , вы можете использовать .grid_forget() . Обратите внимание, что это все еще не уничтожает виджет - наоборот, вы можете продолжить и .grid() снова! - но это не имеет никакого значения.

@Patrick: Я знаю, что вы используете Frame - я говорю о менеджере геометрии. Т.е. вы вызывали the_frame.grid(some, options) , чтобы показать виджет?

Скажем, вы делаете класс. Здесь вам нужно сделать несколько вещей:

  • Кадр, который вы хотите уничтожить, должен быть переменной экземпляра
  • Вам нужно написать обратный вызов (который вы сделали)

Итак, вот как выглядел бы базовый прототип.

from Tkinter import Tk, Frame, Button, Label class GUI: def __init__(self, root): self.root = root # root is a passed Tk object self.button = Button(self.root, text="Push me", command=self.removethis) self.button.pack() self.frame = Frame(self.root) self.frame.pack() self.label = Label(self.frame, text="I'll be destroyed soon!") self.label.pack() def removethis(self): self.frame.destroy() root = Tk() window = GUI(root) root.mainloop() 

Это именно то, что у меня есть, но я все равно получаю сообщение об ошибке "кадр не имеет атрибута Destroy ()". Я обновил свой вопрос с помощью кода

Источник

Читайте также:  Php загрузить базу mysql
Оцените статью