相关疑难解决方法(0)

检查按钮和按钮:使用lambda

我试图根据列表创建一些复选框,但看起来好像我搞砸了命令调用和按钮的可变方面.

我的代码是:

class Example(Frame):

def __init__(self, parent):
    Frame.__init__(self, parent)

    self.parent = parent
    self.initUI()

def initUI(self):

    self.courses = ["CSE 4444", "CSE 4343"]
    self.vars = []

    self.parent.title("Homework Helper")

    self.course_buttons()

    self.pack(fill=BOTH, expand=1)

def course_buttons(self):
    x = 0
    y = 0

    for i in range(0, len(self.courses)):
        self.vars.append(IntVar())
        cb = Checkbutton(self, text=self.courses[i],
                         variable=self.vars[i],
                         command=lambda: self.onClick(i))
        cb.select()
        cb.grid(column=x, row=y)
        y = y+1

def onClick(self, place):

    print place
    if self.vars[place].get() == 1:
        print self.courses[place]
Run Code Online (Sandbox Code Playgroud)

到目前为止的测试是在复选框打开时在控制台上打印课程,但它仅适用于第二个按钮"CSE 4343"按钮.当我与按钮"CSE 4444"交互时,没有打印任何内容.

此外,"place"值onClick始终为1,无论我是单击按钮"CSE 4343"还是按钮"CSE 4444".

python user-interface tkinter

3
推荐指数
1
解决办法
703
查看次数

单击时如何获取按钮ID?

我不知道如何引用在 tkinter 中单击的按钮。

我的代码:

for file in files: 
     btn = Button(root, text=file).pack()
Run Code Online (Sandbox Code Playgroud)

现在例如 50 个按钮是从作为源的文件生成的。
但是,当我单击任何按钮时,只会引用最后一个按钮,而不是我真正想要使用/单击的按钮。

在 JavaScript 中,我们使用this引用我们真正点击的对象,但是我在 Python 中找不到任何解决方案。

python tkinter button

3
推荐指数
1
解决办法
7716
查看次数

Python tkinter查找单击了哪个按钮

我正在尝试实现一个名为“五连胜”的游戏。我创建了一个 15×15 的列表来放置按钮。(我使用 range(16) 因为我还想要一行和一列来显示行号和列号)

我希望我的实现就像一个按钮被点击时一样,它变成了一个标签。但我不知道用户点击了哪个按钮。

我怎样才能实现它?谢谢!

from tkinter import *
root=Tk()
root.wm_title("Five In a Row")
buttonlst=[ list(range(16)) for i in range(16)]

chess=Label(root,width=2,height=2,text='0')

def p(button):
    gi=button.grid_info()
    x=gi['row']
    y=gi['column']
    button.grid_forget()
    chess.grid(row=x,column=y)
    buttonlst[x][y]=chess

for i in range(16):
    for j in range(16):
        if i==0:
            obj=Label(root,width=2,text=hex(j)[-1].upper())
        elif j==0:
            obj=Label(root,width=2,text=hex(i)[-1].upper())
        else:
            obj=Button(root,relief=FLAT,width=2,command=p(obj))
        obj.grid(row=i,column=j)
        buttonlst[i][j]=obj

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

有一个类似的问题如何确定哪个按钮被按下了 Python TKinter 中的按钮网格?. 但我不太明白。

python tkinter

3
推荐指数
1
解决办法
6590
查看次数

tkinter绑定函数与循环变量

我有以下代码可以在循环中创建一系列绑定:

from Tkinter import *
keys = {0:'m', 1:'n', 2:'o'}
def SomeFunc(event=None,number=11):
    print keys[number], number
root = Tk()
field = Canvas(root, height = 200, width = 200, bg = "gray") 
for i in range(2):
    root.bind("<KeyPress-%c>" % keys[i],lambda ev:SomeFunc(ev,i))
field.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我按'm'或'n'时,函数SomeFunc以可变的'i'作为参数被调用。我希望在按“ m”时以0作为参数(使用“ bind”时使用数字“ i”),在按“ n”时以1作为参数来调用它。能做到吗?

python loops tkinter

2
推荐指数
1
解决办法
1264
查看次数

在python中使用参数动态设置回调

我试图从列表形式存储的一组数据动态构建tkinter中的一些按钮.我无法解决的问题是如何在回调函数中添加一个参数.由于回调中的代码直到回调时才执行,因此回调中使用的变量此时已更改了值.

这是代码的(非常)简化版本:

from Tkinter import *
from ttk import *

mylist = ['a','b','c','d','e']


class App:

    def __init__(self, master):

        self.frame = Frame(master)
        self.frame.pack()

        for i in range (0,len(mylist)):
            setattr(self, 'button' + str(i), Button(self.frame, text=mylist[i], command= lambda: self.buttoncall(i)))
            getattr(self, 'button' + str(i)).pack(side=LEFT)

    def buttoncall(self,input):
        print mylist[input]

root = Tk()

app = App(root)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
451
查看次数

标签 统计

python ×5

tkinter ×4

button ×1

loops ×1

user-interface ×1