python3 でGUIを作成しております。
やりたいこと
表のようにEntryやLavelを縦に並べてそこにはスクロールバーをつけたいと思っています。
一番上の行はカラム名なのでスクロールバー の範囲からは外したいのです。
幅や位置は下の入力欄に合わせたいです。
widthなどを計算して無理やり幅を決定するのは使いたくないと思っています。
項目名がない列があったりするので、できれば自動で調整できる方が望ましいです。
# 試したこと
写真のように、masterフレームの中に、subフレームを入れることができないかなと思ったのですが、全然うまくいきませんでした。
subフレームの上に違うフレームを作り、2つを繋げたら、配置ズレてしまいました。
スクロールバー を使う場合は基本的な使い方のような気がするのですがなかなか見つからなく困っております。
よろしくお願いします。
# tkinter from tkinter import * import tkinter as tk from tkscrolledframe import ScrolledFrame class Application(Frame): def __init__(self, master=None): Frame.__init__(self,master) master.configure(bg="white") self.pack() #描写 self.create_widgets(master) #フォームの作成 #フォームの作成 def create_widgets(self,master): Sfram = ScrolledFrame(master) Sfram.pack(padx=10 ,pady=5 , fill="both" , side="top", expand=1) Sfram.bind_arrow_keys(root) Sfram.bind_scroll_wheel(root) inner_frame = Sfram.display_widget(Frame) num_rows = 10 num_cols = 3 labels = ['項目1' , '項目2' , '項目3'] for i in range(len(labels)): w = Label(inner_frame, borderwidth=2, relief="groove", text = labels[i] ) w.grid(row=0, column=i, padx=4, pady=4) for row in range(num_rows): for column in range(num_cols): if column %2==1: w = Label(inner_frame, width=15, borderwidth=2, relief="groove", text = str((row+1) * (column+1)) ) else: w = Label(inner_frame, width=25, borderwidth=2, relief="groove", text = str((row+1) * (column+1)) ) w.grid(row=row+1, column=column, padx=4, pady=4) root.update() Sfram.config(width=inner_frame.winfo_width()) if __name__ == "__main__": root = Tk() root.option_add('*font', ('Ricty Diminished', 12)) app = Application(master=root) app.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/27 03:29