首页 > 解决方案 > tKinter 和 PySimpleGUI 中的帧大小问题

问题描述

我正在尝试创建一个 4 部分显示,其下方的框架跨越两列。我曾尝试在 tKinter 和现在的 PySimpleGUI 中执行此操作。我可以“接近”但不正确。当我为显示插入占位符时,框架的大小被完全忽略。我将为此插入我的确切代码,以便您可以看到,即使每个帧中的帧大小相同(最后一个除外),这些帧都显示不同的大小。
在我将对象添加到框架中之前,框架大小保持不变。

# Imports
import PySimpleGUI as sg

sg.theme('DarkGrey9')


#Global Values
global smoker
global probe
global req_smoker
global req_probe



#smoker will be coded to read the temperature of internal smoker probe
smoker = 180

#probe will be coded to read the temperature of meat probe
probe = 100

req_smoker = int(input("Enter Desired Smoker Temperature: "))

req_probe = int(input("Enter Desired Finish Temperature: "))




if smoker < req_smoker and probe < req_probe:
#activate heating element
    print("Heating")
elif smoker >= req_smoker and probe < req_probe:
#turn off heating element
    print("maintain heat")
elif probe >= req_probe:
    req_smoker = req_probe
    print("Your meat is done!")


col1 = sg.Column([
    [sg.Frame('Smoker Temperature', [[sg.Text("10", font=["Helvetica", 100], text_color="#FF0000", justification="center")],
                                     [sg.Text("Heat Status", font=[48], justification="center", )]], size=(200, 300))],

    [sg.Frame('Req_Smoker Temperature', [[sg.Text("200", font=["Helvetica", 150])]], size=(200, 300))]
                ])

col2 = sg.Column([
    [sg.Frame('Probe Temperature', [[sg.Text("300", font=["Helvetica", 120])]], size=(200,300))],

    [sg.Frame('Finish Temperature', [[sg.Text("40", font=["Helvetica", 180])]], size=(200, 300))]
                ])

col3 = sg.Column([
    [sg.Frame("Options", [[sg.Button('Data-log'), sg.Button("Close"), ]], element_justification="center", size=(500, 100))]
                ])



layout = [[col1, col2], [col3]]

window = sg.Window('Smoker Display', layout, grab_anywhere=True, )

while True:
    event, values = window.read()
    print(event, values)
    if event == sg.WIN_CLOSED:
        break



window.close()

我错过了什么?

标签: pythonpysimplegui

解决方案


选项size暂时不起作用sg.Frame,使用里面的选项size来设置大小。sg.Columnsg.Frame

在此处输入图像描述

演示代码

import PySimpleGUI as sg

sg.theme('DarkGrey9')
size = (300, 200)

column1 = [
    [sg.Text("10", font=("Helvetica", 50), text_color="#FF0000", justification="center")],
    [sg.Text("Heat Status", font=[48], justification="center", )]
]
column2 = [
    [sg.Text("300", font=["Helvetica", 100])]
]
column3 = [
    [sg.Text("200", font=["Helvetica", 120])]
]
column4 = [
    [sg.Text("40", font=["Helvetica", 150])]
]
column5 = [
    [sg.Button('Data-log'), sg.Button("Close")]
]

layout = [
    [sg.Frame('Smoker Temperature',     [[sg.Column(column1, size=size)]]),
     sg.Frame('Probe Temperature' ,     [[sg.Column(column2, size=size)]])],
    [sg.Frame('Req_Smoker Temperature', [[sg.Column(column3, size=size)]]),
     sg.Frame('Finish Temperature',     [[sg.Column(column4, size=size)]])],
    [sg.Frame('Options',                [[sg.Column(column5, size=size)]])],
]

window = sg.Window('Smoker Display', layout, grab_anywhere=True, )

while True:

    event, values = window.read()
    print(event, values)
    if event == sg.WIN_CLOSED:
        break

window.close()

[更新]sg.Column

  • justification为 Column 本身设置理由。注意包含 Column 的整行都会受到影响
  • element_justificationColumn 内的所有元素都将具有此理由 'left'、'right'、'center' 是有效值

和有一些重要的东西justificationelement_justification它意味着与最大宽度的元素对齐。

这里的所有框架或列都具有相同的大小

  • justification工作,但相同尺寸看起来都一样。
  • element_justification工作但与最大宽度的元素对齐。例如,如果您设置element_justification='right',“10”将与“Heat Status”的右侧对齐,并非所有元素都与列对齐。(现在的状态)

推荐阅读