【问题标题】:Python GUI with user input area similar to excel具有类似于 excel 的用户输入区域的 Python GUI
【发布时间】:2021-03-02 16:54:24
【问题描述】:

我正在尝试创建一个允许用户将数据直接复制和粘贴到界面中的 GUI。将有三列,介于 1 - 500 行之间,可能超过 3,000 行原始文本将通过电子邮件、word、PDF 或 excel 提供,因此我需要用户输入字段类似于 excel,因为您可以复制/一次粘贴多于 1 行。

我遵循了一些关于使用 tkinter 创建表格/网格的 YouTube 指南,但是我无法找到一种方法来允许通过复制/粘贴来输入文本。

我发现使用 tkinter 制作表格的唯一方法之一是以下示例,因为 tktable 不是其中的一部分。这仍然不允许用户通过复制/粘贴进行输入。

  
  
class Table: 
      
    def __init__(self,root): 
          
        # code for creating table 
        for i in range(total_rows): 
            for j in range(total_columns): 
                  
                self.e = Entry(root, width=20, fg='blue', 
                               font=('Arial',16,'bold')) 
                  
                self.e.grid(row=i, column=j) 
                self.e.insert(END, lst[i][j]) 
  
# take the data 
lst = [(1,'Raj','Mumbai',19), 
       (2,'Aaryan','Pune',18), 
       (3,'Vaishnavi','Mumbai',20), 
       (4,'Rachna','Mumbai',21), 
       (5,'Shubham','Delhi',21)] 
   
# find total number of rows and 
# columns in list 
total_rows = len(lst) 
total_columns = len(lst[0]) 
   
# create root window 
root = Tk() 
t = Table(root) 
root.mainloop() 

任何人都可以建议 tkinter 的替代方法或为我指明此类用户输入的指南方向吗?

【问题讨论】:

  • 这很难。除非您可以使用库,否则将需要大量代码。看this。如果这没有帮助,您可以尝试绑定到 Ctrl+v/Ctrl+x/Ctrl+c 并自己创建逻辑。
  • 使用ttk.Treeview?
  • @CoolCloud - 我正在研究 Treeview 的 YouTube 指南,但想问这个问题;我可以有一列供用户输入吗?
  • 我不认为直接通过树视图是可能的,但我想你总是可以使用Entry 接收用户输入,然后用它来制作树视图列。

标签: python excel tkinter input


【解决方案1】:

我终于明白为什么我不能让 python 允许我使用 tkinter 并且能够或多或少地做我想做的事情。

import tkinter as tk
from tkinter import *
from tkinter import BOTH, END, LEFT

HEIGHT = 970
WIDTH = 1500

root = tk.Tk()
root.title( 'Daves Generator')

canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()

background_image = tk.PhotoImage(file='david.png')
background_label = tk.Label(root, image=background_image)
background_label.place(relwidth=1, relheight=1)

frame_one = tk.Frame(root, bg='#003d70',bd=5)
frame_one.place(relx=0.17, rely=.15, relwidth=0.3,relheight=0.8, anchor='n')

customer_description = tk.Text(frame_one, state=NORMAL, width=125, wrap=WORD, height=500,font=("Courier", 8))
customer_description.place(relwidth=1, relheight=1)

frame_two = tk.Frame(root, bg='#003d70',bd=5)
frame_two.place(relx=0.5, rely=.15, relwidth=0.3,relheight=0.8, anchor='n')

dave_description = tk.Text(frame_two, width=125, height=500,font=("Courier", 8))
dave_description.place(relwidth=1, relheight=1)

frame_three = tk.Frame(root, bg='#003d70',bd=5)
frame_three.place(relx=0.83, rely=.15, relwidth=0.3,relheight=0.8, anchor='n')

sap_code = tk.Label(frame_three, width=125, height=500,font=("Courier", 8))
sap_code.place(relwidth=1, relheight=1)

header_frame_one = tk.Label(root, text="Customer Descriptions", font=("Courier", 14), fg='#003d70')
header_frame_one.place(relx=0.17, rely=0.13, relwidth=0.2, relheight=0.025, anchor='n')

header_frame_two = tk.Label(root, text="PJ Descriptions", font=("Courier", 14), fg='#003d70')
header_frame_two.place(relx=0.5, rely=0.13, relwidth=0.2, relheight=0.025, anchor='n')

header_frame_three = tk.Label(root, text="SAP Code", font=("Courier", 14), fg='#003d70')
header_frame_three.place(relx=0.83, rely=0.13, relwidth=0.2, relheight=0.025, anchor='n')

generate_button = tk.Button(root,text="Generate!", font=("Courier", 14), fg='white', bg='#003d70', command=lambda: get_customer_description())
generate_button.place(relx=0.5, rely=0.08, relwidth=0.15, relheight=0.025, anchor='n')

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2012-12-12
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-05-21
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多