标签: pysimplegui

使用 PySimpleGUI 将窗口按列划分会出现错误

我正在尝试构建一个显示两列的 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

python pysimplegui

2
推荐指数
1
解决办法
1万
查看次数

获取 Combobox 项的值或索引?

我试图让我的 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不存在...那么我怎样才能从组合框中获取所选值的索引呢?

python pysimplegui

2
推荐指数
1
解决办法
1万
查看次数

在 Pysimplegui 中在图像上绘制矩形

我希望使用 Pysimplegui 在图像上绘制一个矩形。我曾尝试使用 Graph 对象来完成此操作,但据我所知,您无法对图像对象执行任何操作。我在 Pygame 中找到了一个替代方案,但我的脚本已经在 pysimplegui 中构建到了这一点。是否存在此功能/演示?

python pysimplegui

2
推荐指数
1
解决办法
3214
查看次数

PySimpleGUI 冻结

我用 PySimpleGui 4.15.1 在 python 3.8.1 中编写了一个游戏冷拳击模拟器 2 的黑客代码,如果我尝试单击开始/停止按钮,GUI 会冻结,但脚本与开始/停止按钮连接仍在运行。但是,如果我将连接到“开始/停止”按钮的脚本更改为“Print(\'Chicken\')”之类的内容,那么它的工作完全完美\xe2\x80\xab\xe2\x81\xab\xe2\x81\xaf\xe2\ x80\xab\xe2\x81\xab\xe2\x81\xaf\xe2\x80\xab\xe2\x81\xab\xe2\x81\xaf\xe2\x80\xab\xe2\x81\xab\xe2\x80\ xab\xe2\x81\xab\xe2\x80\xab\xe2\x81\xab\xe2\x80\xab\xe2\x80\xab\xe2\x80\xab\xe2\x80\xab\xe2\x80\xab

\n\n

这是代码:

\n\n
import PySimpleGUI as sg\nimport ctypes\nimport time\nimport pynput\n\nsg.theme(\'DarkBrown1\')\n\nlayout = [  [sg.Text(\'BOXING SIMULATOR 2 HACK\', size=(20, 2), justification=\'center\')],\n            [sg.Text(\'\', size=(10, 2), font=(\'Helvetica\', 20), justification=\'center\', key=\'_OUTPUT_\')],\n            [sg.T(\' \' * 5), sg.Button(\'Start/Stop\', focus=True), sg.Quit()]]\n\nwindow = sg.Window(\'BOXING SIMULATOR 2 HACK\', layout)\n\nSendInput = ctypes.windll.user32.SendInput\n\nPUL = ctypes.POINTER(ctypes.c_ulong)\nclass KeyBdInput(ctypes.Structure):\n    _fields_ = [("wVk", ctypes.c_ushort),\n                ("wScan", ctypes.c_ushort),\n                ("dwFlags", ctypes.c_ulong),\n                ("time", ctypes.c_ulong),\n                ("dwExtraInfo", PUL)]\n\nclass HardwareInput(ctypes.Structure):\n    _fields_ = [("uMsg", ctypes.c_ulong),\n                ("wParamL", ctypes.c_short),\n                ("wParamH", ctypes.c_ushort)]\n\nclass MouseInput(ctypes.Structure):\n    _fields_ = …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pynput pysimplegui

2
推荐指数
1
解决办法
4238
查看次数

如何在 pysimplegui 中单击一次后禁用按钮?

我想禁用代码中的“开始更新”按钮

代码 :

import PySimpleGUI as sg
import time
mylist = ["task 1", "task 2", "task 3", "task 4"]
progressbar = [
    [sg.ProgressBar(len(mylist), orientation='h', size=(51, 10), key='progressbar')]
]
outputwin = [
    [sg.Output(size=(78,20))]
]
layout = [
    [sg.Frame('Progress',layout= progressbar)],
    [sg.Frame('Output', layout = outputwin)],
    [sg.Submit('Start update'),sg.Cancel()]

]
window = sg.Window('Assistant updater', layout)
progress_bar = window['progressbar']
while True:
    event, values = window.read(timeout=10)
    if event == 'Cancel'  or event is None:
        break
    elif event == 'Start update':
        for i,item in enumerate(mylist):
            print(item)
            if item=="Reading …
Run Code Online (Sandbox Code Playgroud)

python pysimplegui

2
推荐指数
1
解决办法
1万
查看次数

使用 PySimpleGUI 创建自定义进度条

我刚刚开始学习 PySimpleGUI,我想创建一个自定义 GUI 进度条,它将显示程序的哪些部分在不同时间正在运行。

例如,我有一个包含各种组件的视频处理程序,因此我希望进度栏显示如下文本:

“从视频中提取第一帧”

“裁剪图像”

“删除重复图像”

但所有这些行都需要从程序中的不同函数更新进度条窗口,其中与包含进度条的窗口关联的 GUI 代码未运行。

我的代码:

    image_name_list = Frame_Capture(f"{main_dir}\\{input_line2}.mp4")  # Generates image list of frames of video
    Remove_Duplicates(image_name_list)  # Removes duplicate images
    print("Enter name of pdf file")
    pdf_name = f'{input()}.pdf'
    makePdf(pdf_name, image_name_list)  # Converts images to pdf
    Cleanup(image_name_list)  # Deletes unneeded images
    os.startfile(pdf_name)
Run Code Online (Sandbox Code Playgroud)

在这里,当我的程序本身的 GUI 组件在程序的另一部分中运行时,我需要从“Frame_Capture”、“Remove_Duplicates”、“makePDF”和“Cleanup”功能中更新 GUI 进程栏。

我能想到的两种解决方案是:

  1. 全局创建我的窗口并全局更新其中的进度条
  2. 当我的程序到达需要更新进度条的部分时,将所有进度条语句逐行写入文本文件,并同时每隔几毫秒将文本文件中的最新语句加载到我的进度条中。

这些解决方案听起来都不好。我还有其他方法可以做到这一点吗?

python user-interface tkinter python-3.x pysimplegui

2
推荐指数
1
解决办法
8394
查看次数

PySimpleGui:改变字体,字体显示,Ubuntu,丑陋的字体

在使用 Linux (Ubuntu 20.10) 时,PySimpleGui演示应用程序示例似乎开箱即用地显示“丑陋”字体。

由于我在提供的演示示例中找不到任何有关如何控制它的参考,例如default_font = 'Helvetica'),这些示例似乎隐含地假定默认字体设置应该已经正确。

为了尝试解决这个问题,我已经安装了Helvetica默认的 Windows 字体,但它仍然与在线描述的示例不同。

下面的例子显然不是 Helvetica。

在此处输入图片说明

我该如何解决这个问题?

import PySimpleGUI as sg

'''
    App that shows "how fonts work in PySimpleGUI".
'''

layout = [[sg.Text('This is my sample text', size=(20, 1), key='-text-')],
          [sg.CB('Bold', key='-bold-', change_submits=True),
           sg.CB('Italics', key='-italics-', change_submits=True),
           sg.CB('Underline', key='-underline-', change_submits=True)],
          [sg.Slider((6, 50), default_value=12, size=(14, 20),
                     orientation='h', key='-slider-', change_submits=True),
           sg.Text('Font size')],
          [sg.Text('Font string = '), sg.Text('', size=(25, 1), key='-fontstring-')],
          [sg.Button('Exit')]]

window = sg.Window('Font string …
Run Code Online (Sandbox Code Playgroud)

python tkinter pysimplegui

2
推荐指数
1
解决办法
2503
查看次数

如何在窗口打开时在输出中使用 PySimpleGUI 默认文本

我正在用来PySimpleGUI创建一个文本输出框。

打开程序时,我希望输出在按下任何按钮之前显示一些默认文本。

我怎样才能让这种情况发生?window.Read()等待按下按钮。window.refresh()似乎并没有将文本强制显示到窗口。

import PySimpleGUI as sg

initialString = "I want this text to display on window opening."

def gui2():
    layout = [
              [sg.Output(size=(90,20), background_color='black', text_color='white')],
              [sg.Button('Do things'), sg.Button('Exit')]
             ]
    
    window = sg.Window("Funny Title", layout)
    
    #window.read()  #I need to press a button before the text will display
    #window.refresh() #doesn't refresh the output
    print(initialString)
    #window.refresh() #doesn't refresh the output
    
    while True:
        event, values = window.read() 
        if event in (sg.WIN_CLOSED, 'Exit'):
            break
        elif event == 'Do …
Run Code Online (Sandbox Code Playgroud)

python user-interface pysimplegui

2
推荐指数
1
解决办法
3022
查看次数

PySimpleGUI,如何让字符串在新行上打印而不是切断它?

我正在开发图像查看器,但我注意到在图像查看器中,当要显示的链接太长时,它会被切断。我怎样才能修改这段代码,以便如果字符串太长,它会在新行上打印它。我正在遵循指南,因此您可以查看https://realpython.com/pysimplegui-python/

# img_viewer.py


import PySimpleGUI as sg

import os.path


# First the window layout in 2 columns


file_list_column = [

    [

        sg.Text("Image Folder"),

        sg.In(size=(25, 1), enable_events=True, key="-FOLDER-"),

        sg.FolderBrowse(),

    ],

    [

        sg.Listbox(

            values=[], enable_events=True, size=(40, 20), key="-FILE LIST-"

        )

    ],

]


# For now will only show the name of the file that was chosen

image_viewer_column = [

    [sg.Text("Choose an image from list on left:")],

    [sg.Text(size=(40, 1), key="-TOUT-")],

    [sg.Image(key="-IMAGE-")],

]


# ----- Full layout -----

layout = [

    [

        sg.Column(file_list_column), …
Run Code Online (Sandbox Code Playgroud)

python pysimplegui

2
推荐指数
1
解决办法
4314
查看次数

如何在 PySimpleGUI 中按 Enter 到 InputText 时引发事件

我是 Python 和 PySimpleGUI 的新手,我不知道如何强制我的应用程序处理事件<Enter>键;这是我的代码:

    # Text field
    sg.InputText(
        key=key,
        default_text='',
        enable_events=True,
    ),


    ...


    window = self.graphic_interface.window

    while self.is_running:
        self.event, self.values = window.read(timeout=0)

    ...


    if event in INSERT_SN_KEYS:
        key = event

        if values[key]is not None:
            # Accept only numbers
            if values[key][-1] not in '0123456789':
                window[key].update(values[key][:-1])
Run Code Online (Sandbox Code Playgroud)

我的代码可以处理用户按下的任何键,除了<Enter>; 我还没有找到任何类似于 Button 类中使用的“bind_return_key=True”的 InputText 参数。

我该怎么做?

python tkinter pysimplegui

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

pysimplegui ×10

python ×10

tkinter ×3

python-3.x ×2

user-interface ×2

pynput ×1