我正在尝试为我的应用程序制作一个 GUI,但遇到了一个问题:使用时PySimpleGUI
我必须首先定义布局,然后才显示整个窗口。现在的代码是这样的:
import PySimpleGUI as sg
layout = [[sg.Text('Input:')],
[sg.Input(do_not_clear=False)],
[sg.Button('Read'), sg.Exit()],
[sg.Text('Alternatives:')],
[sg.Listbox(values=('value1', 'value2', 'value3'), size=(30, 2))]]
window = sg.Window('Alternative items', layout)
while True:
event, values = window.Read()
if event is None or event == 'Exit':
break
print(values[0])
window.Close()
Run Code Online (Sandbox Code Playgroud)
是否可以只在按下按钮Listbox
后显示?Read
因为我只会Listbox
在输入后获得值。也许可以在按钮事件后用新值更新列表框?
我有三个 python 脚本。一个从数据库(data_for_report.py
)收集数据,另一个从该数据和创建者 .xlsx 文件(report_gen.py
)生成报告,最后一个修改该 excel 文件的样式(excel_style.py
)。
现在所有三个文件都在同一目录中,我现在所做的只是在解释器中一个接一个地执行脚本以获取报告。我想一键完成所有工作,以便需要此报告的人可以自己完成。我想用 pyinstaller 创建一个 exe,但我想不出一种方法将我的脚本链接在一起,以便在data_for_report.py
结束时开始工作report_gen.py
等等。
我试着把
subprocess.call("report_gen.py", shell=True)
Run Code Online (Sandbox Code Playgroud)
在第一个脚本结束时,但没有任何反应,我只是得到了这个:
出[2]:1
我怎么能这样做?
我正在尝试构建一个显示两列的 GUI:一列将包含所有输入字段和列表框,第二列将显示来自pandas dataframe
.
我认为使用 来执行此操作是一个好主意Frames
,但在尝试创建时遇到错误Frame
:
layout = [sg.Frame('Input data',[[
sg.Text('Input:'),
sg.Input(do_not_clear=False),
sg.Button('Read'), sg.Exit(),
sg.Text('Alternatives:'),
sg.Listbox(values=('alternatives...', ''), size=(30, 2), key='_LISTBOX_')]])]
Run Code Online (Sandbox Code Playgroud)
结果:
TypeError:* 之后的 AddRow() 参数必须是可迭代的,而不是 Frame
如何解决这个问题?
我在想是否可以先使用 定义列,Frame
然后将列放入 的定义中layout
?
我试图让我的 GUI 根据组合框中选择的项目显示信息。PySimpleGUI
食谱说我应该使用GetSelectedItemsIndexes()
方法,但是当我尝试使用它时:
window.Element('_COMBOBOX_').GetSelectedItemsIndexes()
Run Code Online (Sandbox Code Playgroud)
我明白了:
AttributeError:“Combo”对象没有属性“GetSelectedItemsIndexes”
我尝试在控制台中输入以下内容:
dir(window.Element('_COMBOBOX_'))
Run Code Online (Sandbox Code Playgroud)
似乎根本GetSelectedItemsIndexes
不存在...那么我怎样才能从组合框中获取所选值的索引呢?