如果从 PySimpleGUI 弹出单击 sg.Submit(),如何生成 file.txt?

How to generate file.txt if pop-up click on sg.Submit() from PySimpleGUI?

我正在尝试将这行代码放入此图形用户界面中...


try:
    name_file = input('Name:')
    file= open(name_file, 'r+')
except FileNotFoundError:
    file= open(name_file, 'w+')
    file.writelines(u'file!')
file.close()

import PySimpleGUI as sg

layout = [
    [sg.Text('Name1', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name2', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name3', size=(15, 1), background_color="white" ), sg.InputText()],

    [sg.Submit(), sg.Cancel()]
]

window = sg.Window('Test', layout, background_color="white")
event, values = window.Read()
window.Close()
# print(event, values[0])

try:
    name_file = input('Name:')
    file= open(name_file, 'r+')
except FileNotFoundError:
    file= open(name_file, 'w+')
    file.writelines(u'file!')
file.close()

您不必将其放入 GUI 中。 GUI后即可使用

您可以使用事件来检查按下了哪个按钮,然后您可以请求文件名并将数据写入文件。

import PySimpleGUI as sg

layout = [
    [sg.Text('Name1', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name2', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name3', size=(15, 1), background_color="white" ), sg.InputText()],

    [sg.Submit(), sg.Cancel()]
]

window = sg.Window('Test', layout, background_color="white")
event, values = window.Read()
window.Close()

if event == 'Submit':
    try:
        name_file = input('Name:')
        file= open(name_file, 'r+')
    except FileNotFoundError:
        file= open(name_file, 'w+')

    all_values = values.values() # values from dictionary
    text = "\n".join(all_values) # put values in separated lines
    file.write(text)             # write all as one string

    file.close()

您可以创建 GUI 来询问文件名。


编辑: 我使用 GUI 来询问文件名。

import PySimpleGUI as sg

layout = [
    [sg.Text('Name1', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name2', size=(15, 1), background_color="white" ), sg.InputText()],
    [sg.Text('Name3', size=(15, 1), background_color="white" ), sg.InputText()],

    [sg.Submit(), sg.Cancel()]
]

window = sg.Window('Test', layout, background_color="white")
event, values = window.Read()
window.Close()

if event == 'Submit':
    # create before next GUI because I want to use the same name for variable `values`
    all_values = values.values() # values from dictionary
    text = "\n".join(all_values) # put values in separated lines

    layout = [
        [sg.Text('Filename', size=(15, 1), background_color="white" ), sg.InputText()],

        [sg.Submit(), sg.Cancel()]
    ]

    window = sg.Window('Test', layout, background_color="white")
    event, values = window.Read()
    window.Close()

    if event == 'Submit':
        name_file = values[0]

        try:
            fh = open(name_file, 'r+')
        except FileNotFoundError:
            fh = open(name_file, 'w+')

        fh.write(text) # write all as one string

        fh.close()

您可以使用 high-level Popup 函数获取您的文件名,这将消除打开您自己的文件名的要求 window 并将代码压缩为:

import PySimpleGUI as sg

name_file = sg.PopupGetText('Enter Filename')
if name_file:
    try:
        file = open(name_file, 'r+')
    except FileNotFoundError:
        file = open(name_file, 'w+')
        file.writelines(u'file!')

还有一个 Popup 使您能够浏览名为 PopupGetFile 的文件名。与 PopupGetText 相比的优势在于,您可以获得将文件名粘贴到输入框中的相同能力,但如果您喜欢这种方式,您还可以获得一个 "Save As..." 按钮来浏览文件。使用它,您的代码将是:

import PySimpleGUI as sg

name_file = sg.PopupGetFile('Enter Filename', save_as=True)
if name_file:
    try:
        file = open(name_file, 'r+')
    except FileNotFoundError:
        file = open(name_file, 'w+')
        file.writelines(u'file!')