标签: tkinter

Tkinter按钮命令在运行程序时激活?

我正在尝试制作一个构建检索表单,并且似乎有按钮的问题......我是Python/tkinter GUI编程(以及一般的GUI编程)的新手,并借用了Hello World应用程序的框架,并且sorta建立了这个.

在下面的代码中,我设置了Browse按钮的"command"选项,在单击时调用我的类的内部get_dir()函数.但是,只要我尝试运行应用程序,就会调用get_dir()函数,并提示我选择一个目录.任何想法为什么会发生这种情况,以及我能做些什么才能使其表现正常?

from Tkinter import *
import tkFont
from tkFileDialog import askdirectory

class App:

    def __init__(self, master):

        fontHead = tkFont.Font(family="Arial", size=10, weight=tkFont.BOLD)
        fontBold = tkFont.Font(family="Arial", size=8, weight=tkFont.BOLD)
        fontReg =  tkFont.Font(family="Arial", size=8)

        frameN = Frame(master)
        frameN.grid(row=0,padx=5,pady=5)

        frameXBH = Frame(frameN)
        frameXBH.grid(row=0,columnspan=5,padx=5)

        Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=20,background="#cccccc").grid(row=0)
        Label(frameXBH, text="Xbox 360",font=fontBold,width=9).grid(row=0,column=1)
        Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=440,background="#cccccc").grid(row=0,column=2,sticky="WE")

        Label(frameN, text="Destination Path:",font=fontReg).grid(row=1,sticky="W")
        xbPath = Entry(frameN,width=30,font=fontReg)
        xbPath.grid(row=1,column=1,sticky="W")
        xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))
        xbBrowse.grid(row=1,column=2,sticky="W")
        xbRel = Checkbutton(frameN,text="Release",font=fontReg)
        xbRel.grid(row=1,column=3,sticky="W")
        xbShip = Checkbutton(frameN,text="Ship",font=fontReg)
        xbShip.grid(row=1,column=4,sticky="W")

        Canvas(frameN,borderwidth=1,relief="groove",width=550,height=0).grid(row=2,columnspan=5,pady=10)

        # SAVE AND CANCEL

        btnSave = Button(frameN,text="Save",width=10)
        btnSave.grid(row=3,column=3,sticky="E")

        btnCancel = Button(frameN,text="Cancel",width=10)
        btnCancel.grid(row=3,column=4,sticky="W")

    def get_dir(self,box): …
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter

17
推荐指数
3
解决办法
3万
查看次数

如何在tkinter中使无声异常更大声?

如果我从终端运行以下代码,我会在终端中收到有用的错误消息:

import Tkinter as tk

master = tk.Tk()

def callback():
    raise UserWarning("Exception!")

b = tk.Button(master, text="This will raise an exception", command=callback)
b.pack()

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

但是,如果我在没有终端的情况下运行它(例如,通过双击图标),则会禁止显示错误消息.

在我真实的,更复杂的Tkinter应用程序中,我喜欢GUI有点防撞击.我不喜欢我的用户很难给我有用的反馈来解决导致的意外行为.

我该怎么处理?有没有一种标准方法可以在Tkinter应用程序中公开回溯或stderror或诸如此类的东西?我正在寻找比尝试/除了各处更优雅的东西.

编辑:Jochen Ritzel给出了一个很好的答案,弹出一个警告框,并提到将它附加到一个班级.只是为了明确这一点:

import Tkinter as tk
import traceback, tkMessageBox

class App:
    def __init__(self, master):
        master.report_callback_exception = self.report_callback_exception
        self.frame = tk.Frame(master)
        self.frame.pack()
        b = tk.Button(
            self.frame, text="This will cause an exception",
            command=self.cause_exception)
        b.pack()

    def cause_exception(self):
        a = []
        a.a = 0 #A traceback makes this easy to catch and fix

    def report_callback_exception(self, *args):
        err = …
Run Code Online (Sandbox Code Playgroud)

python user-interface warnings exception tkinter

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

删除和更改tkinter事件绑定

如何停止处理事件或切换为其调用的函数?

修订代码:

from Tkinter import *

class GUI:
    def __init__(self,root):
        Window = Frame(root)
        self.DrawArea = Canvas(Window)
        self.DrawArea.pack()
        Window.pack()

        self.DrawArea.bind("<Button 1>",self.starttracking)

    def updatetracking(self,event):
        print event.x,event.y

    def finishtracking(self,event):
        self.DrawArea.bind("<Button 1>",self.starttracking)
        self.DrawArea.unbind("<Motion>")

    def starttracking(self,event):
        print event.x,event.y
        self.DrawArea.bind("<Motion>",self.updatetracking)
        self.DrawArea.bind("<Button 1>",self.finishtracking)



if __name__ == '__main__':
    root = Tk()
    App = GUI(root)
    root.mainloop()
Run Code Online (Sandbox Code Playgroud)

python events tkinter

17
推荐指数
3
解决办法
2万
查看次数

如何在tkinter列表框中突出显示选择?

我在单选模式下设置了2个单独的列表框.当我从中选择一个项目时listboxA,它会突出显示,但是当我从中选择一个项目时listboxB,它会突出显示,并且该项目listboxA保持活动状态,但不会突出显示.如何突出显示两者?

python tkinter

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

使用python以错误的顺序拉出目录中的文件

我正在使用目录中的文件填充tkinter列表框.文件的名称都以01 - n中的数字开头.当我查看目录中的文件时,它们按数字顺序出现.但是,当我将文件加载到列表框中时,它们不是按数字顺序排序的.我可以更改前导数字,但相同的文件将始终出现在同一位置.

我只是使用简化的项目名称来简化这个例子.它仍然表明它们不是按字母顺序或数字顺序排序的.

该列表应在我的列表框中显示如下

01. itemA
02. itemB
03. itemC
04. itemD
Run Code Online (Sandbox Code Playgroud)

但它看起来像:

01. itemA
04. itemD
02. itemB
03. itemC
Run Code Online (Sandbox Code Playgroud)

我可以更改前导数字,但文件将始终以相同的顺序(按名称而不是数字)填充.奇怪的是,它甚至不是按字母顺序排列的.

我用过这个

i = 0
for filename in os.listdir(directory):
      fileList.insert(i, filename)
      i = i + 1
Run Code Online (Sandbox Code Playgroud)

还有这个

 for filename in os.listdir(directory):
        fileList.insert(END, filename)
Run Code Online (Sandbox Code Playgroud)

两者都导致相同的事情.

python tkinter list

17
推荐指数
2
解决办法
2万
查看次数

Tkinter变量跟踪方法回调的参数是什么?

Python有Tkinter的变量类StringVar(),BooleanVar()等等,这些都共享方法get(),set(string)trace(mode, callback).callback作为第二个参数传递的函数传递了trace(mode, callback)四个参数,self, n, m, x.

BooleanVar()这些似乎是一个例子'', 'PYVAR0', 'w'.

第三个参数x似乎是触发跟踪的模式,在我的情况下,变量已更改.但是,第一个看似空字符串的变量是什么?什么是第二个,如果我不得不猜测我会说变量的内部名称?

python tkinter

17
推荐指数
2
解决办法
2万
查看次数

PermissionError:[Errno 13]权限被拒绝

我收到这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
return self.func(*args)
File "C:/Users/Marc/Documents/Programmation/Python/Llamachat/Llamachat/Llamachat.py", line 32, in download
with open(place_to_save, 'wb') as file:
PermissionError: [Errno 13] Permission denied: '/goodbye.txt'
Run Code Online (Sandbox Code Playgroud)

运行时:

def download():
    # get selected line index
    index = films_list.curselection()[0]
    # get the line's text
    selected_text = films_list.get(index)
    directory = filedialog.askdirectory(parent=root, 
                                        title="Choose where to save your movie")
    place_to_save = directory + '/' + selected_text
    print(directory, selected_text, place_to_save)
    with open(place_to_save, 'wb') as file:
        connect.retrbinary('RETR ' …
Run Code Online (Sandbox Code Playgroud)

windows tkinter permission-denied python-3.x

17
推荐指数
4
解决办法
11万
查看次数

Tkinter标签的边框

不是真的相关,但我正在构建一个日历,我有很多Label小部件,因此如果我有一些边框,它会看起来更好!

我已经看到你可以为其他小部件(如Button,Entry和Text)执行此操作.

最小代码:

from tkinter import *

root = Tk()

L1 = Label(root, text="This")
L2 = Label(root, text="That")

L1.pack()
L2.pack()
Run Code Online (Sandbox Code Playgroud)

我试过设置

highlightthickness=4
highlightcolor="black"
highlightbackground="black"
borderwidth=4
Run Code Online (Sandbox Code Playgroud)

在小部件内部,但仍然是相同的结果.

示例pic tkinter

这甚至可能吗?谢谢!

python tkinter

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

为什么Tkinter在Windows上渲染质量更差?

我在Mac上用Tkinter开发了一个python应用程序.它涉及表格和画布图纸.在Mac上,它看起来很棒.然而,在我的戴尔笔记本电脑(4K显示器,比我的Mac更强大),Tkinter ui看起来非常像素化,并且某些元素的位置略有不同.这个问题是什么,以及如何在戴尔Windows 10或其他平台上更好地渲染Tkinter?这是UI的相同部分的屏幕截图(显示表单和画布图)...

视窗(坏) 在此输入图像描述

MAC(正常)

在此输入图像描述

python windows user-interface tkinter

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

Python Tkinter - 从列表中创建下拉列表选择栏

我正在创建一个用于构建人员信息的GUI.我希望用户使用下拉栏选择他们的出生月份,将之前配置的月份作为列表格式.

from tkinter import *

birth_month = [
    'Jan',
    'Feb',
    'March',
    'April'
    ]   #etc


def click():
    entered_text = entry.get()

Data = Tk()
Data.title('Data') #Title

label = Label(Data, text='Birth month select:')
label.grid(row=2, column=0, sticky=W) #Select title
Run Code Online (Sandbox Code Playgroud)

如何创建下拉列表以显示月份?

python tkinter drop-down-menu

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