私はTixを使ってコンテンツが変わると自動的にスクロールバーを作成しています。アプリケーションの内容をスクロールしながら、ユーザーの視点にボタンを1つまたは2つ保存したいと考えています。 私はTkinter/Tixのこの質問をまだ見ていないので、私は尋ねると思った。スクロール中にウィジェットを表示する方法を教えてください。
次のコードは、ボタンがウィンドウの固定された位置にあり、スクロールされている問題のサンプルを作成します。
from Tkinter import *
import Tix
class some_GUI:
def __init__(self, root):
sw= Tix.ScrolledWindow(root, scrollbar=Tix.AUTO)
sw.pack(fill=Tix.BOTH, expand=1)
frame1 = Frame(sw.window)
frame1.grid(row = 0, column = 1)
frame2 = Frame(sw.window)
frame2.grid(row = 0, column = 2)
def quit():
root.quit()
for i in range(0,300):
label1 = Label(frame1, text = "foo")
label1.grid(row = i, column = 0)
button = Button(frame2, text = "Quit", command = quit)
button.pack()
root = Tix.Tk()
display = some_GUI(root)
root.mainloop()
ボタンを「frame2」にし、アプリケーションのウィンドウに対して垂直に中央に配置します。 winfo_height/winfo_widthを使ってフレームの高さ/幅を検索してみましたが、これらの値はラベルとボタンを追加しても変更されませんでした。
可能/未遂ソリューション:
私は、次の手順を実行して、[1] sw.subwidgets_allにフレーム2入れる:
frame1.pack(side = LEFT) frame2 = Frame(sw.subwidgets_all()[1]) frame2.pack(side = RIGHT) button = Button(frame2, text = "Quit", command = quit) button.pack(side = RIGHT)
これは、アプリケーションに対して固定された位置を許可しますが、ウィンドウは、frame1の代わりにボタンの親に対して相対的にサイズ変更されます。もう一つの欠点は、水平スクロールバーがframe1にのみ関連していることです。
スクロールバーの中点を見つけて、場所を使用してこれらの座標を基準にしてボタンの位置を更新します。これを達成する方法がわからず、SOソリューションを一般的に見ると、これは非効率的な方法ですこれを行う。
EDIT:これは私が考えていたものを正確ではありませんが、次のコードは、コメントでfalsetruの提案どおりに動作します:あなたが言及した
from Tkinter import *
import Tix
class some_GUI:
def __init__(self, root):
def quit():
root.quit()
frame2 = Frame(root)
frame2.pack(side = RIGHT)
button = Button(frame2, text = "Quit", command = quit)
button.pack()
frame1 = Frame(root)
frame1.pack(side = LEFT)
sw= Tix.ScrolledWindow(frame1, scrollbar=Tix.AUTO)
sw.pack(fill=Tix.BOTH, expand=1)
for widget in sw.subwidgets_all():
print widget
for i in range(0,300):
label1 = Label(sw.window, text = "foo")
label1.grid(row = i, column = i)
print root.winfo_toplevel()
for widget in sw.subwidgets_all():
print widget
root = Tix.Tk()
display = some_GUI(root)
root.mainloop()
スクロールウィンドウの外にボタンを置く方法は? – falsetru
@falsetru私はいつも一度あなたがそれを知っていれば、どれほどシンプルなソリューションになるか驚いています。私はそれを受け入れることができるように正式な回答をしたいですか?私は質問などで作業コードを編集します。私は解決策1の後にその経路を避けた。ありがとうございました! –