标签: tkinter

TkInter:如何从回调函数按钮调用变量?

我是Tkinter的绝对初学者,我需要帮助:我想用一个按钮打开一个文件.我到处都发现这个非常简单的例子:

from Tkinter import *
from tkFileDialog   import askopenfilename      

def callback():
    name= askopenfilename() 
    print name

errmsg = 'Error!'
Button(text='File Open', command=callback).pack(fill=X)
mainloop()
Run Code Online (Sandbox Code Playgroud)

但是,如何从函数回调中调用变量"name"?我在这个函数之外需要这个变量!当然,我也可以在回调函数中打开文件,但我需要打开的文件将内容保存在数组中并使用数组...

python tkinter button

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

Tkinter Treeview网格对齐问题

在扩展应用程序窗口时,如何使树视图小部件粘贴到Noth(到工具栏).

它坚持西南和东部,但不是北部.

使用:

self.tree.grid(row=1,column=0,sticky=N+W+E+S)
Run Code Online (Sandbox Code Playgroud)

我这是tree.grid对齐配置

...
    self.vsb = ttk.Scrollbar(master, orient=VERTICAL, command=self.tree.yview)
    self.hsb = ttk.Scrollbar(master, orient=HORIZONTAL, command=self.tree.xview)
    self.vsb.grid(row=1, column=1, sticky='ns')
    self.hsb.grid(row=2, column=0, sticky='ew')
    self.tree.configure(yscrollcommand=self.vsb.set)
    self.tree.configure(xscrollcommand=self.hsb.set)

    self.tree.grid(row=1,column=0,sticky=N+W+E+S)
...
Run Code Online (Sandbox Code Playgroud)

这是工具栏网格配置(如果它导致问题)

...
        self.toolbar = Frame(master, bg="blue")
        self.upButton = Button(self.toolbar, text="Up", command=self.doNothing, padx=10, pady=10)
        self.upButton.grid(row=0,column=0,sticky=N+W)

        self.downButton = Button(self.toolbar, text="Down", command=self.doNothing, padx=10, pady=10)
        self.downButton.grid(row=0,column=1, sticky=N+W)

        self.insupButton = Button(self.toolbar, text="Insert UP", command=lambda: self.insertUp(self.tree), padx=10, pady=10)
        self.insupButton.grid(row=0,column=2, sticky=N+W)

        self.insdownButton = Button(self.toolbar, text="Insert Down", command=lambda: self.insertDown(self.tree), padx=10, pady=10)
        self.insdownButton.grid(row=0,column=3, sticky=N+W)

        self.delbrButton = Button(self.toolbar, text="Delete branch", command=lambda: self.deleteBr(self.tree), …
Run Code Online (Sandbox Code Playgroud)

treeview tkinter python-2.7

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

在tkinter中创建标签的问题

我在tkinter中创建了简单的标签,但它是用{}创建的,我不想这样做.

gameOver=Label(root, text=('Game over!\nYou scored', number, ' points!'),
                               font=('Arial Black', '26'), bg='red')
Run Code Online (Sandbox Code Playgroud)

这是我的代码,其中number是可变的.但它打印出"{Game over!you scored} 0 {points!}"这就是用这段代码得到的(0是值number)

在此输入图像描述

任何解决这个问题的想法都是受欢迎的

python label tkinter

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

键盘快捷键绑定,弹出上下文菜单和TypeErrors

我总是觉得当我在stackoverflow上问一个问题就像答案那样......应该是...... RTFM,即使我得到的每一个答案都是友好,耐心和接受的.经过一个下午试图找到答案,我被困住了.我想打开一个Tkinter,文本框和绑定键(键盘快捷键)和一个菜单项,所以我会有一个很好的弹出菜单(也就是上下文菜单),如Window的记事本,你右击,看看

Cut 
Copy 
Paste 
----- 
Select All
Run Code Online (Sandbox Code Playgroud)

Ctrl+ X,Ctrl+ C,Ctrl+ VCtrl+ A作为键绑定(我还没弄清楚如何进行撤销).问题是我无法同时使用键绑定和菜单弹出窗口来使用相同的功能.如果我从select_all()的定义中添加或删除"event"参数,则一个有效,但另一个则无效.

from Tkinter import *

# Clears the clipboard and copies the selected text to the it
def copy():
    mainwin.clipboard_clear()
    mainwin.clipboard_append(mainwin.selection_get())

# Needed for the right click pop-up menu to work, goes with copy()
def popup(event):
    popupmenu.post(event.x_root, event.y_root)

# Selects all text, used with the "control a" keybinding
def select_all(event):
    textbox.tag_add(SEL, "1.0", END)
    textbox.mark_set(INSERT, "1.0")
    textbox.see(INSERT) …
Run Code Online (Sandbox Code Playgroud)

python types keyboard-shortcuts contextmenu tkinter

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

为什么将值变为"无"而不是"现场"?

这是Game of Life计划.当我测试它时,我的周围(行,col)函数返回0,即使配置文件指示8个方格将被设置为"LIVE".只需在打开配置文件后通过打印电路板进行测试,结果表明,而不是让指示的方块显示为"LIVE",那些"LIVE"表示"无",因此没有计算"LIVE"值.

[[None,None,None,0,0,0,0],[None,0,None,0,0,0,0],[None,None,None,0,0,0,0],[ 0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0, 0,0,0,0,0,0]是我得到的print board.看不到我在这里缺少的东西?

LIVE = 1
DEAD = 0

def board(canvas, width, height, n):
    for row in range(n+1):
        for col in range(n+1):
            canvas.create_rectangle(row*height/n,col*width/n,(row+1)*height/n,(col+1)*width/n,width=1,fill='black',outline='green')                      

n = int(raw_input("Enter the dimensions of the board: "))
width = n*25
height = n*25

from Tkinter import *
import math

window=Tk()
window.title('Game of Life')

canvas=Canvas(window,width=width,height=height,highlightthickness=0)
canvas.grid(row=0,column=0,columnspan=5)

board = [[DEAD for row in range(n)] for col in range(n)]

rect = [[None for row in range(n)] for col in range(n)]


for row …
Run Code Online (Sandbox Code Playgroud)

python tkinter

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

我/我是否将其作为函数递归?

我有三个游戏功能,如下:

def round():
    global board
    board_copy = [[x for x in row] for row in board]
    for row in range(n):
        for col in range(n):
            if countNeighbors(row,col) == 3:
                board_copy[row][col] = LIVE
                canvas.itemconfigure(rect[row][col],fill='red')
            elif countNeighbors(row,col) > 3 or countNeighbors(row,col) < 2:
                board_copy[row][col] = DEAD
                canvas.itemconfigure(rect[row][col],fill='black')
    board = board_copy

def start():
    round()
    global alarm
    alarm = window.after(500,round)

def stop():
    global alarm
    window.after.cancel(alarm)
Run Code Online (Sandbox Code Playgroud)

我希望start()函数round()每500毫秒运行一次,直到用户打开stop()(使用按钮).但是,在完全停止之前,调用start()只给了我两次迭代round().

python tkinter

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

将持久值传递给类

在Linux Mint'Mate'17环境中使用Python 2.7和Tkinter

我是OOP的新手,并不了解如何将持久值传递给类实例; 在此代码中,当我在第20行和第22行使用Pin_ID时,会生成"全局未定义"错误:

 1  #!/usr/bin/env python
 2  import Tkinter as tk
 3
 4  root = tk.Tk()
 5
 6  class cbClass:
 7    def __init__(self, Pin_ID):
 8      self.cb_Txt=tk.StringVar()
 9      self.cb_Txt.set("Pin " + Pin_ID + " OFF")
10      self.cb_Var = tk.IntVar()
11      cb = tk.Checkbutton(
12        root,
13        textvariable=self.cb_Txt,
14        variable=self.cb_Var,
15        command=self.cbTest)
16      cb.pack()
17
18    def cbTest(self):
19      if self.cb_Var.get():
20        self.cb_Txt.set("Pin " + Pin_ID + " ON")
21      else:
22        self.cb_Txt.set("Pin " + Pin_ID + " OFF")
23 …
Run Code Online (Sandbox Code Playgroud)

python oop tkinter

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

尝试将变量"data"从"on_select"传递给Text-Widget

我试图将变量"data"从"on_select"传递给Text-Widget.通过选择列表框中的项目,可以使某人导入的文件内容发生变化.但我仍然是一个非常初学者,不知道如何传递数据的价值.有人可以帮我吗?谢谢!

from Tkinter import *
import tkFileDialog
root=Tk()
data = "Bitte eine Datei importieren."

class View(Listbox):
    def __init__(self, master):
        Listbox.__init__(self, master, width=75, selectmode=SINGLE)

class Controller(object):
    def __init__(self, master):
        self._master = master

        frame1 = Frame(self._master)
        frame1.pack(side=LEFT, fill=BOTH, padx=5,expand=True)

        self._Listbox=View(frame1)
        self._Listbox.pack(side = TOP,fill=BOTH, expand = True,pady=20)

        menubar = Menu(self._master)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Importieren", command = self.file_open)
        filemenu.add_command(label="Beenden", command = quit)
        menubar.add_cascade(label='File',menu=filemenu)
        self._master.config(menu=menubar)

    def on_select(event):
        filename = self._Listbox.get(self._Listbox.curselection()[0])

        global data
        data = "Test"

        with open(filename,'r') as f:
            data = f.readlines()
        print data …
Run Code Online (Sandbox Code Playgroud)

python variables tkinter global-variables

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

tkinter滚动条在窗口中不起作用

我刚开始使用tkinter,我不知道如何使滚动条工作.我在stackoverflow上检查了许多关于tkinter的不同线程,我对我究竟需要做什么感到困惑.

我已经添加了滚动条,但它没有滚动任何内容(注释#*******Scrollbar*******).我希望它从内容框架滚动文本.

已经在#*******词典数据*******中插入了lorem ipsum.

from tkinter import *

class Search(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.minsize(380,444)
        self.maxsize(380,444)
        self.title("")

        self.search_start = StringVar()
        self.search_start.set('Enter your query')
        self.search_result = StringVar()

        self.bind("<Return>", self.search_button)

        self.scrollbar = Frame(self)
        self.scrollbar.pack(side=RIGHT, fill=Y)
        self.search_bar = Frame(self, bg="blue")
        self.search_bar.pack(side=TOP, fill=X)
        self.index = Frame(self)
        self.index.pack(side=LEFT)
        self.content = Frame(self)
        self.content.pack(side=TOP, fill=X)
        self.status_bar = Frame(self, bg="yellow")
        self.status_bar.pack(side=BOTTOM, fill=X)

# ******* Search Input *******

        self.entry = Entry(self.search_bar, textvariable = self.search_start)
        self.entry.pack(side=LEFT, padx=4, pady=4)

# ******* Search Button *******

        self.search = Button(self.search_bar, text="Search", command=self.search_button)
        self.search.pack(side=LEFT)

# ******* …
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x

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

在Tkinter中使用root.after和root.mainloop的正确方法

我有一个tkinter界面,需要每5分钟自动刷新一次。到目前为止,没有问题,您只需要执行以下操作即可:

root.after(300000, function_to_run, args_of_fun_to_run)
Run Code Online (Sandbox Code Playgroud)

问题是我必须在“无限”时间内完成此操作。该方案是GUI将在连接到电视的PC上运行,并在我的办公室中显示24/7的某些信息。这可以工作大约8个小时,然后出现以下错误:

在此处输入图片说明

现在,我知道回溯一直一直到我使用matplotlib的自定义模块之一中的一行。我的自定义模块都不使用任何循环,因此我知道错误不是直接来自其中一个循环(如果我输入错误,请更正我),因此必须由我无限次地重复执行该函数。这是我主要功能的代码:

from tkinter import *
from tkinter import ttk
import logging
import datetime
import sys

sys.path.append(r'C:\Users\me\Desktop\seprated sla screens')

import sla_main as sla
import main_frame as mf
import sla_grid as sg
import incoming_volume as iv
import outgoing_volume as ov
import read_forecast as fc
import get_headers as hd
import vol_graph as vg
import out_graph as og
import add_graph as ag
import sla_reduction_email as sre

###################################
###################################
###################################
###################################

runs = 0

def maininterface(f_size, pic_x, pic_y):

    global runs …
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x

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