首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在链接列表中绑定python按钮命令,打开特定的链接?

在链接列表中绑定python按钮命令,打开特定的链接?
EN

Stack Overflow用户
提问于 2021-05-13 14:05:36
回答 1查看 145关注 0票数 0

我使用for循环在create_widgets()函数中布局一个3x3个按钮网格。

我很难将每个特定的按钮链接到'link_list‘(在dunder方法中)中的一个链接。

在我的代码中,它尝试基于变量“list_list”(这是可以理解的)索引,这个变量总是超出范围,因为它每次添加一个,而在完成时,这使它超出了范围。我在寻求帮助建立一个解决方案

  1. 按钮的命令根据按钮的数量/位置或
  2. 动态索引/切片按钮的命令被具体化为webbrowser.open()函数,并在创建

时与索引中的链接匹配

我也不确定其中一个是否比另一个更有利。

(我的目标是:建立一个个人指挥中心,从一个位置打开桌面应用程序和网络链接&我认为列表是一个很好的起点,可以收集我希望它打开的重要链接。)

非常感谢你考虑帮忙

以下是我目前的计划:

代码语言:javascript
复制
import tkinter as tk
import os
import random
import webbrowser
from tkinter import Frame
class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)
        self.master = master
        self.grid()
        self.create_widgets()
        self.link_list = ['evernote:///view/21614375/s192/10b4247b-5f09-4b66-953d-02e5f27aac3c/10b4247b-5f09-4b66-953d-02e5f27aac3c/',
                        'Anaconda-Navigator://', 'zoom.us://', 'Evernote://', 'Messages://',
                        'https://open.spotify.com/track/2gI9RfuSwulsBujm7hbOFv?si=891addaca9524eaf',
                        'spotify://', 'workflowy://', 'Brave-Browser://']

    def create_widgets(self):
        
        self.button_number = 0
        #for loop button creation
        for i in range(3):
            for j in range(3):
                #first button
                self.first_button = tk.Button(self, state = 'normal', padx =50, pady = 50)
                self.first_button["text"] = "BUTTON",self.button_number
                self.first_button["command"] = lambda: webbrowser.open(self.link_list[self.button_number])
                #self.first_button["command"] = self.lets_go
                self.first_button.grid(row = i, column = j)
                self.button_number += 1

        ##QUIT BUTTON
        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.grid()

    #for First Button
    def lets_go(self):
        webbrowser.open(self.link_list[self.button_number])   #, new = 0 )


root = tk.Tk()
app = Application(master = root)
app.mainloop()
EN

回答 1

Stack Overflow用户

发布于 2021-05-13 14:46:03

这里有一个方法可以做到这一点:

代码语言:javascript
复制
from tkinter import Tk, Button
import webbrowser
from functools import partial

link_list = ['evernote:///view/21614375/s192/10b4247b-5f09-4b66-953d-02e5f27aac3c/10b4247b-5f09-4b66-953d-02e5f27aac3c/',
             'Anaconda-Navigator://', 'zoom.us://', 'Evernote://', 'Messages://',
             'https://open.spotify.com/track/2gI9RfuSwulsBujm7hbOFv?si=891addaca9524eaf',
             'spotify://', 'workflowy://', 'Brave-Browser://']

root = Tk()

row = 0
col = 0
for index, link in enumerate(link_list):
    Button(root, text=f'Button {index + 1}', command=partial(webbrowser.open, link)).grid(row=row, column=col)
    col += 1
    if col >= 3:
        col = 0
        row += 1

root.mainloop()

基本上,partial()所做的就是每次都用相同的参数执行给定的函数,或者至少这是我能给出的最好的解释。

About partial()

Other source for partial()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67520651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档