私はキャンバスに次々にラベルを手配したいと思います。しかし、配置は必要に応じて出てこない。Tkinter:Canvasを相対的にキャンバスに配置する。
以下は、ラベルをキャンバスに挿入する機能です。しかし、forループのものは重複しています。理由 - 一部のラベルは、他のラベルよりサイズが大きくなっています。したがって、私は最大のサイズが80であり、プレースメントをそれぞれ行うと仮定します。私はこのタイプのアプローチを変更したいと思います。むしろ、ラベルを相対的に1つずつ配置したいと思っています。
def calculate(*args):
try:
ttk.Label(canvas, text="Result:").place(x=20, y=20)
ttk.Label(canvas, text="Topic:").place(x=20, y=80)
ttk.Label(canvas, textvariable=topic).place(x=200, y=80)
ttk.Label(canvas, text="Environment:").place(x=20, y=120)
ttk.Label(canvas, textvariable=environment).place(x=200, y=120)
ttk.Label(canvas, text="Event Results:").place(x=20, y=160)
inputValue=TextArea.get("1.0","end-1c")
len_max=0
result={}
for s in inputValue.splitlines():
data = MainInstance.searchWithPayload(s)
result[s]=data
if len(s+data) > len_max:
len_max = len(s+data)
i = 190
for key in result.keys():
print(key)
print(result[key])
ttk.Label(canvas, text=key+"\n\n"+result[key], wraplength=800).place(x=20,y = i)
i = i + 80
except ValueError:
pass
以下は、キャンバスウィジェットを統合したコードです。計算ボタンはcalculate関数を呼び出します。
ttk.Button(page2, text="Exit",command=page1.quit).grid(column=2, row=8)
ttk.Button(page2, text="Calculate", command=calculate).grid(column=3, row=8)
canvas = Canvas(root, width=900, height=universal_height)
canvas.grid(column=1, row=0)
root.mainloop()
は実際には、問題の2つの部分があります
にはどうすれば比較的重なりを停止するようにラベルを配置することができますか?
キャンバスにスクロールを追加しようとしました。しかし、アプリケーションは応答せず、ポップアップしません。スクロールバーを追加するための
コード:
canvas=Canvas(root,bg='#FFFFFF',width=300,height=300,scrollregion=
(0,0,500,500))
hbar=Scrollbar(root,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(root,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=300,height=300)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
これは最初の2つのラベルが重なっ取得され、私は、取得しています出力されます。
理由:あなたが問題を重複していて、それをスクロールできるようにする
create_window
を使用してキャンバス内のフレームを入れないように私は、あなたがフレームを作成するために、その中のすべてのあなたのラベルをグリッドを提案しますあなたは 'place'を使っていますか? 'pack'(そしてそれほどの程度は' grid')はウィジェットを行や列に簡単に表示させるために設計されています。 –
グリッドを使用すると、キャンバスウィンドウのサイズがそのコンテンツのサイズに縮小されます。 フレームサイズを修正するために、私は場所を使うことを考えました。 – raizsh
'.grid()'はここでははるかに優れているようです。すべてのコンテンツを「キャンバス」に入れることは完全に必要ですか? –