我的 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)
获取所选范围本身并不困难
问题可能在于你如何将 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()