#tkinter
#tkinter
Вопрос:
несмотря на то, что я уже определил ширину и высоту кнопок, они, похоже, занимают весь кадр самостоятельно. Я не могу понять возможную причину этого.
import tkinter as tk root = tk.Tk() root.geometry('400x400') root.columnconfigure(0, weight=1) root.grid_rowconfigure(0, weight=1) main_frame = tk.Frame(root, bg="gray") main_frame.grid(sticky='news') f2 = tk.Frame(main_frame) # create a frame inside the main frame to attach scroll bar to f2.grid(row=1, column=1, padx=5, pady=5, sticky='nw', columnspan=3) # for north, west f2.grid_rowconfigure(0, weight=1) f2.grid_columnconfigure(0, weight=1) c2 = tk.Canvas(f2, bg="orange") c2.grid(row=0, column=0, sticky="nsew") hsb = tk.Scrollbar(f2, orient="horizontal", command=c2.xview, width=10) hsb.grid(row=1, column=0, sticky='we') # west-east c2.configure(xscrollcommand=hsb.set) f2_c2 = tk.Frame(c2, bg="yellow") c2.create_window((0, 0), window=f2_c2, anchor='nw') b1 = tk.Button(f2_c2, relief='raised', width=200, height=200) b1.grid(row=0, column=0 ,padx=5, pady=5) b2 = tk.Button(f2_c2, relief='raised', width=200, height=200) b2.grid(row=0, column=1, padx=5, pady=5) b3 = tk.Button(f2_c2, relief='raised', width=200, height=200) b3.grid(row=0, column=2, padx=5, pady=5) f2_c2.update_idletasks() c2.configure(scrollregion=c2.bbox("all"), width=400, height=400) root.mainloop()
есть ли обходной путь или мне чего-то не хватает ?
Комментарии:
1. Обратите внимание, что
width
это в символах иheight
в строках для кнопки без изображения. Итак, вы создаете большие кнопки. Измените эти параметры, например,width=10, height=2
чтобы увидеть разницу.2. Спасибо за разъяснение.. Похоже, сейчас все работает так, как и должно быть. Но все еще не понимаю, почему он покрывал весь кадр, хотя я установил их высоту и ширину почти на половину кадра, в который я их поместил.
3. Еще раз,
width
иheight
параметры не указаны в пикселях для кнопки без изображения . Они различаются по количеству символов и количеству строк соответственно. Поэтому для вашего случая вы создали кнопки шириной 200 символов и высотой 200 строк .4. Да, немного повозившись с ним, я наконец понял, что происходит. Большое вам спасибо за потраченное время.
Ответ №1:
Атрибуты width
и height
кнопки (и некоторых других) задокументированы в единицах символов среднего размера, если на кнопке нет изображения. Таким образом, если вы установите ширину 200, это будет 200 символов. Если ширина одного символа составляет 16 пикселей, вы устанавливаете ширину кнопки на 3200 пикселей.
Если вы хотите указать ширину в пикселях, вы можете добавить невидимый пиксель к кнопке.
img = tk.PhotoImage() b1 = tk.Button(f2_c2, relief='raised', width=200, height=200, image=img, compound="c") b2 = tk.Button(f2_c2, relief='raised', width=200, height=200, image=img, compound="c") b3 = tk.Button(f2_c2, relief='raised', width=200, height=200, image=img, compound="c")
Ответ №2:
#BUTTON image_1 = tk.PhotoImage() button_1 = tk.Button(f2_c2, relief='raised', width=200, height=200, image=image_1, compound="c")