Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-根据按下按钮的时间将值传回main()_Python_Python 3.x_Tkinter - Fatal编程技术网

Python-根据按下按钮的时间将值传回main()

Python-根据按下按钮的时间将值传回main(),python,python-3.x,tkinter,Python,Python 3.x,Tkinter,如果这是一种糟糕的做事方式,请原谅我,但总体而言,我对开发是新手 我试图使用tkinter创建一个包含多个按钮的窗口,每个按钮上都有一个播放器的名称,使用一个名为from main()的类 然后,我希望能够使用稍后在应用程序中按下的按钮上的名称,因此我希望将其传递回main()。因此,如果我点击Annie按钮,我想打开一个新窗口,称为“Annie的选项”,我假设值“Annie”需要传递回主函数 我的主要代码: <imports appear here> def main():

如果这是一种糟糕的做事方式,请原谅我,但总体而言,我对开发是新手

我试图使用tkinter创建一个包含多个按钮的窗口,每个按钮上都有一个播放器的名称,使用一个名为from main()的类

然后,我希望能够使用稍后在应用程序中按下的按钮上的名称,因此我希望将其传递回main()。因此,如果我点击Annie按钮,我想打开一个新窗口,称为“Annie的选项”,我假设值“Annie”需要传递回主函数

我的主要代码:

<imports appear here>
def main():

    players = ['Annie','Benny','Carrie','Donny']
    winHome = playerWindow(root,players)
    print("In main() : " + winHome.selected)

    root.mainloop()


if __name__ == "__main__":
    main()

def main():
玩家=['Annie'、'Benny'、'Carrie'、'Donny']
winHome=playerWindow(root,玩家)
打印(“在main():”+winHome.selected)
root.mainloop()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我的班级代码:

<imports appear here>
root=Tk()

class playerWindow():

def selectPlayer(self,selname):

    self.selected = selname
    print("In class: " + self.selected)

def __init__(self, master, players=[]):

    colours = ['red','green','orange','white','yellow','blue']
    self.selected = ""

    r = 0
    for p in players:
        randcol = random.randint(0,len(colours))-1
        if colours[randcol] in ('blue','green'):
            fgcol='white'
        else:
            fgcol='black'
        playername = delplayer = p
         playername = Button(root, text=playername, bg=colours[randcol], fg=fgcol, width=15, command=lambda name = playername:self.selectPlayer(name)).grid(row=r,column=0)
        s = ttk.Separator(root, orient=VERTICAL)
        delplayer = Button(root, text='Del', bg='grey', fg='red', width=5, command=lambda name = delplayer: print("Delete Player %s" % name)).grid(row=r,column=1)
        r = r + 1

    Button(root, text="New Player", fg="black", command=lambda: print("New Player Functionality"), width=15).grid(row = len(players)+3,column=0)
    Button(root, text="QUIT", fg="red", command=root.destroy, width=15).grid(row = len(players)+3,column=1)

root=Tk()
类playerWindow():
def selectPlayer(self,selname):
self.selected=selname
打印(“类内:+self.selected)
def uuu init(self,master,players=[]):
颜色=[‘红色’、‘绿色’、‘橙色’、‘白色’、‘黄色’、‘蓝色’]
self.selected=“”
r=0
对于p-in玩家:
randcol=random.randint(0,len(颜色))-1
如果颜色[randcol]为('blue','green'):
fgcol='white'
其他:
fgcol='黑色'
playername=delplayer=p
playername=Button(root,text=playername,bg=colors[randcol],fg=fgcol,width=15,command=lambda name=playername:self.selectPlayer(name)).grid(行=r,列=0)
s=ttk.分隔符(根,方向=垂直)
delplayer=按钮(根,text='Del',bg='grey',fg='red',width=5,command=lambda name=delplayer:print(“删除播放器%s”%name))。网格(行=r,列=1)
r=r+1
按钮(root,text=“New Player”,fg=“black”,command=lambda:print(“New Player功能”),宽度=15)。网格(row=len(players)+3,column=0)
按钮(root,text=“QUIT”,fg=“red”,command=root.destroy,width=15)。网格(row=len(players)+3,column=1)
正在发生的事情是,创建了窗口,main()中的下一行运行(我添加的print语句),该行为空,显然main正在继续。当我按下按钮时,sleectPlayer功能被调用并工作

不知何故,我需要将该值返回main()以使用该值继续执行下一个任务,但是我似乎无法正确地构建问题以获得所需的答案

任何帮助都将不胜感激


我正在使用Python 3.5.1,您已经在访问它了。我个人不喜欢返回到main函数,相反,我建议创建一个顶级类来链接回它。这应该有助于让事情变得更好

import tkinter as tk
from tkinter import ttk
import random

class PlayerWindow():
    def __init__(self, master, parent, players=[]):

        self._parent = parent

        colours = ['red','green','orange','white','yellow','blue']
        self.selected = ""

        r = 0
        for p in players:
            randcol = random.randint(0,len(colours))-1
            if colours[randcol] in ('blue','green'):
                fgcol='white'
            else:
                fgcol='black'
            playername = delplayer = p
            playername = tk.Button(master, text=playername, bg=colours[randcol], \
                        fg=fgcol, width=15, command=lambda name = \
                        playername:self.selectPlayer(name)).grid(row=r,column=0)

            s = ttk.Separator(master, orient=tk.VERTICAL)

            delplayer = tk.Button(master, text='Del', bg='grey', fg='red', \
                        width=5, command=lambda name = delplayer: \
                        print("Delete Player %s" % name)).grid(row=r,column=1)
            r = r + 1

        tk.Button(master, text="New Player", fg="black", command=lambda: \
                  print("New Player Functionality"), width=15).\
                  grid(row = len(players)+3,column=0)

        tk.Button(master, text="QUIT", fg="red", command=self._parent.close,
                  width=15).grid(row = len(players)+3,column=1)

    def selectPlayer(self, selname):
        self.selected = selname
        print("In class: " + self.selected)
        self._parent.hello() # call hello function of top-level, links back

class MyApplication(object):
    def __init__(self, master):
        self._master = master
        players = ['Annie','Benny','Carrie','Donny']
        self._player_window = PlayerWindow(master, self, players)
        print("In main() : " + self._player_window.selected)

    def hello(self):
        name = self._player_window.selected
        print("Hello, %s" % name)

    def close(self):
        # any other clean-up
        self._master.destroy()

def main():
    root = tk.Tk()
    app = MyApplication(root)
    root.mainloop()

if __name__ == "__main__":
    main()

非常感谢!这让我前进了很多。你的压痕被打破了。