pysimplegui如何让不同的控件同时滚动且只显示一个滚动条
时间: 2023-09-18 12:09:17 浏览: 43
要实现PySimpleGUI中不同控件的滚动同步并且只显示一个滚动条,您可以使用`TKScrolledWindow`元素。`TKScrolledWindow`元素是一个自定义的PySimpleGUI元素,它可以将多个PySimpleGUI元素包含在一个可滚动的窗口中,并在需要时自动添加滚动条。
以下是一个示例程序,它将两个`Multiline`元素包含在一个`TKScrolledWindow`中,并实现了它们之间的滚动同步:
```python
import PySimpleGUI as sg
# Define the layout
layout = [
[
sg.TKScrolledWindow(
layout=[
[sg.Multiline(size=(40, 10), key="-MULTI1-")],
[sg.Multiline(size=(40, 10), key="-MULTI2-")]
],
size=(400, 200),
scrollable=True,
horizontal_scroll_only=False,
vertical_scroll_only=True,
no_titlebar=True
)
],
[sg.Button("Exit", size=(10, 1))]
]
# Create the window
window = sg.Window("Scrolled Window", layout)
# Create a reference to each multiline element
multi1 = window["-MULTI1-"]
multi2 = window["-MULTI2-"]
# Loop to process window events
while True:
event, values = window.read()
# Exit if the Exit button is clicked or the window is closed
if event == sg.WINDOW_CLOSED or event == "Exit":
break
# Synchronize the scroll positions of the multiline elements
scroll_position = window["-MULTI1-"].Widget.yview()[0]
multi1.Widget.yview_moveto(scroll_position)
multi2.Widget.yview_moveto(scroll_position)
# Close the window
window.close()
```
在上面的示例程序中,`TKScrolledWindow`元素包含了两个`Multiline`元素。当用户在其中一个`Multiline`元素中滚动时,代码会将另一个`Multiline`的滚动位置设置为相同的值,从而实现它们之间的滚动同步。`TKScrolledWindow`自动添加了一个滚动条,以便用户可以在两个`Multiline`元素之间滚动。注意,`TKScrolledWindow`没有标题栏,以便它看起来像一个单一的控件。