[英]I was using pysimplegui and i want to position button on the right side
[英]PySimpleGui right justify a button in a frame
我正在使用pysimplegui
構建一個簡單的 GUI,並希望在框架內右對齊按鈕。 我找到了有關如何使用文本而不是按鈕執行此操作的詳細信息。
例如,我希望下面的按鈕與框架的右側對齊,並在其周圍有凹槽。 我要這個:
看起來更像這樣:
但是不必添加手動調整的空白文本元素以使其接近,因為這通常不能正確排列(注意下面注釋掉的sg.Text("", size=(22, 1))
行)。
import sys
import PySimpleGUI as sg
sg.theme("Light Blue 2")
layout = [
[
sg.Text("Target folder", size=(9, 1)),
sg.InputText(default_text="Choose a folder...", size=(59, 1)),
sg.FolderBrowse(),
],
[
sg.Frame(
layout=[
[
sg.Text("First parameter", size=(15, 1)),
sg.InputText(default_text="2", size=(3, 1),),
],
[
sg.Text("Second parameter", size=(15, 1)),
sg.InputText(default_text="8", size=(3, 1),),
# sg.Text("", size=(22, 1)),
sg.Submit("A nice button", size=(23, 1)),
],
[sg.ProgressBar(1, orientation="h", size=(50, 20))],
],
title="Cool subpanel",
relief=sg.RELIEF_GROOVE,
)
],
]
window = sg.Window("Test window", layout)
while True:
event, values = window.read()
if event == "Cancel" or event is None:
sys.exit()
您可以將框架部分的內容拆分為兩個sg.Column
,然后將expand_x
設置為True
,將element_justification
設置為right
,將vertical_alignment
設置為bottom
,這將獲得您的定位。
import sys
import PySimpleGUI as sg
sg.theme("Light Blue 2")
l_col = sg.Column(
[
[
sg.Text("First parameter", size=(15, 1)),
sg.InputText(default_text="2", size=(3, 1)),
],
[
sg.Text("Second parameter", size=(15, 1)),
sg.InputText(default_text="8", size=(3, 1)),
],
]
)
r_col = sg.Column(
[[sg.Submit("A nice button", size=(23, 1))]],
element_justification="right",
vertical_alignment="bottom",
expand_x=True,
)
layout = [
[
sg.Text("Target folder", size=(9, 1)),
sg.InputText(default_text="Choose a folder...", size=(59, 1)),
sg.FolderBrowse(),
],
[
sg.Frame(
layout=[
[l_col, r_col],
[sg.ProgressBar(1, orientation="h", size=(50, 20))],
],
title="Cool subpanel",
relief=sg.RELIEF_GROOVE,
)
],
]
window = sg.Window("Test window", layout)
while True:
event, values = window.read()
if event == "Cancel" or event is None:
sys.exit()
macOS 上的尺寸似乎有點偏離,但這應該可以滿足需要。
您的問題只是錯過了使此操作變得微不足道的 PySimpleGUI 版本。
StackOverflow 的一個問題是 - “沒有什么死”......包括舊的解決方案。 這是一個真正的問題,我還沒有找到可靠的解決方案。
該技術於 2021 年 9 月在版本 4.48.0 中發布,並使用了當時新的Push
元素。 顧名思義, Push
將推動元素。 通過在元素之間放置一個,它會將元素分開。
這是您的代碼,在您想要右對齊的按鈕之前添加了Push
。
import sys
import PySimpleGUI as sg
sg.theme("Light Blue 2")
layout = [
[
sg.Text("Target folder", size=(9, 1)),
sg.InputText(default_text="Choose a folder...", size=(59, 1)),
sg.FolderBrowse(),
],
[
sg.Frame(
layout=[
[
sg.Text("First parameter", size=(15, 1)),
sg.InputText(default_text="2", size=(3, 1),),
],
[
sg.Text("Second parameter", size=(15, 1)),
sg.InputText(default_text="8", size=(3, 1),),
sg.Push(),
sg.Button("A nice button", size=(23, 1)),
],
[sg.ProgressBar(1, orientation="h", size=(50, 20))],
],
title="Cool subpanel",
relief=sg.RELIEF_GROOVE,
)
],
]
window = sg.Window("Test window", layout)
while True:
event, values = window.read()
if event == "Cancel" or event is None:
sys.exit()
注意(這不是很重要) - 我已經用Button
替換了Submit
,因為使用Submit
可能會令人困惑。 Submit
只不過是一個返回帶有文本"Submit"
的Button
元素的函數。 它沒有做任何特別的事情,實際上提供的參數可能比Button
少。
用具有零填充的列元素替換內聯按鈕也可以,並且需要較少的代碼修改。
對於舊版本的 PySimpleGUI, expand_x
參數沒有定義,因此您必須為列分配一個鍵並顯式調用 expand 方法:
import sys
import PySimpleGUI as sg
sg.theme("Light Blue 2")
layout = [
[
sg.Text("Target folder", size=(9, 1)),
sg.InputText(default_text="Choose a folder...", size=(59, 1)),
sg.FolderBrowse(),
],
[
sg.Frame(
layout=[
[
sg.Text("First parameter", size=(15, 1)),
sg.InputText(default_text="2", size=(3, 1),),
],
[
sg.Text("Second parameter", size=(15, 1)),
sg.InputText(default_text="8", size=(3, 1),),
sg.Column(
[[sg.Submit("A nice fat button", size=(23, 1))]],
element_justification="right",
expand_x=True,
key="c1",
pad=(0, 0),
),
],
[sg.ProgressBar(1, orientation="h", size=(50, 20))],
],
title="Cool subpanel",
relief=sg.RELIEF_GROOVE,
)
],
]
window = sg.Window("Test window", layout)
# window['c1'].expand(True, False, False) # use this when 'expand_x' flag is not available
while True:
event, values = window.read()
if event == "Cancel" or event is None:
sys.exit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.