lengyue869 发表于 2020-10-22 11:01:34

如何批量新建Button&Entry,点击button选择文件,将路径写入对应的Entry


求助: 如何批量新建Button&Entry,点击button选择文件,将路径写入对应的Entry
下面的代码可以批量创建Button&Entry,但是没办法实现点击button选择文件,将路径写入对应的Entry


import tkinter as tk
from tkinter.filedialog import *

root=tk.Tk()
root.geometry('500x300')
iCount=input('請輸入文件個數:')
sFilePath=tk.StringVar()
def btn_com():
    sFilePath.set(askopenfilename())

for i in range(1,int(iCount)+1):
tk.Button(root,text='請選擇文件'+str(i),command=btn_com).grid(row=i-1,column=0)
tk.Entry(root,textvariable=sFilePath,width=50).grid(row=i-1,column=1)

mainloop()

疾风怪盗 发表于 2020-10-22 12:08:25

试试这样,name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表,这句话可以预设添加,以免超范围
import tkinter as tk
from tkinter.filedialog import *

root = tk.Tk()
root.geometry('500x300')
iCount = input('請輸入文件個數:')
name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表


class file_name():# 定义类,用来创建循环对象
    def __init__(self):
      self.sFilePath = tk.StringVar()

    def btn_com(self):
      self.sFilePath.set(askopenfilename())


for i in range(1, int(iCount) + 1):
    name_list = file_name()# 用对象名字列表内元素,创建循环对象
    tk.Button(root, text='請選擇文件' + str(i), command=name_list.btn_com).grid(row=i - 1, column=0)
    tk.Entry(root, textvariable=name_list.sFilePath, width=50).grid(row=i - 1, column=1)

mainloop()

lengyue869 发表于 2020-10-22 15:53:50

疾风怪盗 发表于 2020-10-22 12:08
试试这样,name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表,这句话可以预设添加,以免超范围

NB,多谢啦!

lengyue869 发表于 2020-10-22 16:34:59

疾风怪盗 发表于 2020-10-22 12:08
试试这样,name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表,这句话可以预设添加,以免超范围

批量建完后如果我要单独修改按钮上面的文字该怎么写呢?

疾风怪盗 发表于 2020-10-22 16:57:31

lengyue869 发表于 2020-10-22 16:34
批量建完后如果我要单独修改按钮上面的文字该怎么写呢?

{:10_284:}不知道啊。。。。。。

疾风怪盗 发表于 2020-10-22 17:18:56

lengyue869 发表于 2020-10-22 16:34
批量建完后如果我要单独修改按钮上面的文字该怎么写呢?

尝试了下,这样可以,但是有些限制,就是也要添加名字列表,循环修改
import tkinter as tk
from tkinter.filedialog import *

root = tk.Tk()
root.geometry('500x300')
iCount = input('請輸入文件個數:')
name_list = ['a', 'b', 'c', 'd']# 定义对象名字列表


class file_name():# 定义类,用来创建循环对象
    def __init__(self, i):
      self.sFilePath = tk.StringVar()
      self.name = f'name{i}'
      print(self.name)

    def btn_com(self):
      self.sFilePath.set(askopenfilename())


for i in range(1, int(iCount) + 1):
    name_list = file_name(i)# 用对象名字列表内元素,创建循环对象
    name_list.name = tk.Button(root, text='請選擇文件' + str(i), command=name_list.btn_com)
    name_list.name.grid(row=i - 1, column=0)
    tk.Entry(root, textvariable=name_list.sFilePath, width=50).grid(row=i - 1, column=1)

file_name_list = ['a', 'b', 'c', 'd']
for i in range(1, int(iCount) + 1):
    name_list.name['text'] = file_name_list
mainloop()

lengyue869 发表于 2020-10-23 09:01:56

疾风怪盗 发表于 2020-10-22 17:18
尝试了下,这样可以,但是有些限制,就是也要添加名字列表,循环修改

perfect !!!

lengyue869 发表于 2020-10-26 17:04:31

疾风怪盗 发表于 2020-10-22 17:18
尝试了下,这样可以,但是有些限制,就是也要添加名字列表,循环修改

再次請教如何實現以下功能

點擊Run按鈕將Entry中的路徑寫入到Excel B列中對應的單元格(因現在權限不夠,沒辦法上傳圖片跟excel附件.....)


import tkinter as tk
from tkinter.filedialog import *
import winreg
import xlwings as xw

root = tk.Tk()
root.geometry('850x400+300+100')
# iCount = int(input('請輸入文件個數:'))
iCount = 3
name_list = ['a', 'b', 'c', 'd','e','f','g']# 定义对象名字列表

def get_desktop():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                         r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
    return winreg.QueryValueEx(key,"Desktop")
desPath=get_desktop()

#=====================================================================
def btn_run():
    app = xw.App(visible=True, add_book=False)
    wb_vba=app.books.open('VBA test.xlsm')
    sht_main=wb_vba.sheets['main']
    for i in range(1,iCount+1):
      sht_main.range(i+3,2).value='Entry中對應的文件路徑'

    # vba=app.macro('VBA_Test')
    # vba.run()

#=====================================================================

class file_name():# 定义类,用来创建循环对象
    def __init__(self):
      self.sFilePath = tk.StringVar()

    def btn_com(self):
      global desPath
      self.sFilePath.set(askopenfilename())
      # self.sFilePath.set(askopenfilename(initialdir=desPath))

for i in range(1, iCount + 1):
    name_list = file_name()# 用对象名字列表内元素,创建循环对象
    tk.Label(text="File"+str(i),width=10,bd=8,
             font=('Arial',13)).grid(row=i-1,column=0)
    tk.Button(root, text='選擇文件',bd=2,font=('Arial',10),
            command=name_list.btn_com).grid(row=i - 1, column=2)
    tk.Entry(root, textvariable=name_list.sFilePath,
             width=70,font=('Arial',13)).grid(row=i - 1, column=1)

btnRun=tk.Button(text='    Run    ',font=('Arial',11),bg='green',fg='white',
               command=btn_run)
btnRun.grid(row=i,column=1)

mainloop()

疾风怪盗 发表于 2020-10-27 12:05:37

lengyue869 发表于 2020-10-26 17:04
再次請教如何實現以下功能

點擊Run按鈕將Entry中的路徑寫入到Excel B列中對應的單元格(因現在權限不夠 ...

不知道额。。。。。。。。。。。

lengyue869 发表于 2020-10-27 12:28:29

疾风怪盗 发表于 2020-10-27 12:05
不知道额。。。。。。。。。。。

已经解决咯,先将路径写到列表,再写到excel就行了
页: [1]
查看完整版本: 如何批量新建Button&Entry,点击button选择文件,将路径写入对应的Entry