动态填充tkinter和xlwings中的条目

问题描述 投票:0回答:1

我的 GUI 中有一个条目小部件,可以根据电子表格中选择的单元格动态填充单元格范围。

例如,如果我在工作表中选择了 A1:F30,它会将范围 A1:F30 放入条目小部件中。 下面是我在 GUI 中的输入小部件的部分

这是我能够在输入框中从电子表格中选择范围的示例。但我想将相同的概念应用于 tkinter GUI

wb = xw.books.active
sheet = wb.sheets.active
        selectedRange = sheet.api.Application.InputBox(
            'Select your range:', Type=8)
        selectedRangeAdd = sheet.range(selectedRange.Address)
python tkinter xlwings
1个回答
0
投票

获取所选范围本身并不困难
问题可能在于你如何将 tkinter 与 xlwings 交互。

您可以使用示例代码作为输入对话框,然后在单击输入框上的“确定”时将选择复制到输入框中。

以下代码会将选择内容直接复制到输入框,但使用时间延迟来允许您选择范围。这在实际使用中不太实用,但可能会有所帮助。

代码示例
使用您原来的 tkinter 示例库
当计时器等待时,选择所需的范围,该范围将出现在输入框中

import tkinter as tk
from time import sleep
from tkinter.font import Font
import xlwings as xw


root = tk.Tk()
wb = xw.Book()
ws = wb.sheets["Sheet1"]

root.geometry('800x640')
font1 = Font(family="Helvetica")

framelabel = tk.LabelFrame(root, text="Orthogonal Option only", bg="lightblue", font=font1, bd=2, relief="solid")
framelabel.place(x=5, y=440, height=80, width=460)

label = tk.Label(framelabel, text='selected range:', fg='black', bg="lightblue", font=10)
label.place(x=10, y=10)

print("Sleep for range selection")
sleep(5)
selectedRange = wb.app.selection.address
print(f"Range:{selectedRange}")

entry = tk.Entry(framelabel, width=40)
# entry.insert(0, "Default Text")
entry.insert(0, selectedRange)
entry.place(x=125, y=10)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.