标签: tkinter

创建一个没有X(关闭)按钮的python tkinter窗口

我正在编写一个'向导'类型的Python Tkinter GUI,它从用户收集信息,然后根据用户的条目执行多个操作:文件复制,数据库更新等.处理通常需要30-60秒,在此期间,我想要:

  1. 为用户提供有关活动和进度的文本更新
  2. 阻止用户关闭应用程序,直到它完成它正在做的事情

我开始将文本更新显示在子窗口中,该子窗口被配置为trainsientwait_window用于暂停主循环直到活动完成.这适用于我创建的其他自定义对话框,它们具有调用窗口destroy方法的OK/cancel按钮.基本方法是:

def myCustomDialog(parent,*args):
    winCDLG = _cdlgWin(parent,*args)
    winCDLG.showWin()
    winCDLG.dlgWin.focus_set()
    winCDLG.dlgWin.grab_set()
    winCDLG.dlgWin.transient(parent)
    winCDLG.dlgWin.wait_window(winCDLG.dlgWin)
    return winCDLG.userResponse

class _cdlgWin():
    def __init__(self,parent,*args):
        self.parent = parent
        self.dlgWin = tk.Toplevel()
        self.userResponse = ''

    def showWin(self):
        #Tkinter widgets and geometry defined here

    def _btnOKClick(self):
        #self.userResponse assigned from user entry/entries on dialog
        self.dlgWin.destroy()

    def _btnCancelClick(self):
        self.dlgWin.destroy()
Run Code Online (Sandbox Code Playgroud)

但是,这种方法不适用于我想要创建的新监视器和更新对话框.

首先,因为没有用户启动的操作来触发复制/更新活动然后destroy,我必须将它们放在showWin或其他方法中.我已经尝试了两种方式但是我遇到了竞争条件(代码完成了复制/更新的东西,但之后尝试在它之前销毁窗口),并且从不执​​行复制/更新的东西,因为它点击wait_window之前我可以激活其他方法.

如果我能找到一种方法,那么次要问题(防止用户在工作完成之前关闭子窗口)将在下面的答案中介绍.

那么......有什么样的绑带可以申请让这种方法按我想要的方式工作吗?或者我需要废弃它,因为它无法正常工作?(如果是后者,有什么方法可以实现最初的目标吗?)

python windows tkinter windows-7 python-2.7

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

当鼠标悬停在它上面时,tkinter Radiobutton会被选中

我在tkinter中使用Radiobuttons,我可以选择它们很好但是当鼠标悬停在其中一个选项上时,它会被选中,而我实际上没有点击鼠标左键.我已经看过将Radiobutton的状态改为禁用但显然我不能选择被禁用的选项而且我也使用了deselect和select方法而且它们不会阻止鼠标选择当它悬停在它上面时的选项.有没有办法在我使用鼠标单击之前停止鼠标选择选项?

谢谢

这是代码:

    var1 = IntVar()
    self.u1r1 = Radiobutton(self, text = 'Passed', value = 1, variable = var1)
    self.u1r1.grid(row = 0, column = 0, sticky = W)
    self.u1r2 = Radiobutton(self, text = 'Not Passed', value = 2, variable = var1)
    self.u1r2.grid(row = 0, column = 0, sticky = W, padx = 60)
    self.u1r3 = Radiobutton(self, text = 'Waiting', value = 3, variable = var1)
    self.u1r3.grid(row = 0, column = 0, sticky = W, padx = 145)
Run Code Online (Sandbox Code Playgroud)

python tkinter radio-button

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

对象没有属性get

我正在使用python 3.3中的tkinter模块.我对此比较新,我正在使用输入框.出于某种原因,当我运行以下代码时,我收到一条错误消息,指出At​​tributeError:'NoneType'对象没有属性'get'.有人可以向我解释原因吗?我做了一个类似的程序,只有一个条目,工作得很好.

from tkinter import *
master =Tk()
class quad(object):
def __init__(self, ae, be, ce):
    self.ae = ae
    self.be = be
    self.ce = ce

def calculate(self):
    a = self.ae.get()
    b = self.be.get()
    c = self.ce.get()
    A = float(a)
    B = float(b)
    C = float(c)
    D = (-B)/(2*A)
    E = ((B**2 -4*A*C)**(.5))/(2*A)
    first = D + E
    second = D - E
    print(first, "\n", second)
Label(master, text='A=').grid(row=0, column=0)
Label(master, text='B=').grid(row=1, column=0)
Label(master, text='C=').grid(row=2, column=0)      
ae = Entry(master).grid(row=0, column=1)
be = Entry(master).grid(row=1, …
Run Code Online (Sandbox Code Playgroud)

python tkinter tkinter-entry

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

如何在python 3.3.0中导入Tkinter

我运行python版本3.3.0和什么时候尝试import Tkinter在命令窗口,我得到这种类型的错误:

>>> import Tkinter
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    import Tkinter
ImportError: No module named 'Tkinter'
>>>
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.

python tkinter python-3.x

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

Tkinter从正在运行的程序中删除按钮

我试图创建一个功能,创建并在屏幕上放置一个按钮(带网格),按钮的命令将自行删除(或任何其他小部件),但我没有这样做.

def a(self):
    self.call_button = Tkinter.Button(self.root, text = "Call", command=self.b).grid(row = 5, column = 5)

def b(self):
    self.call_button.destroy()
Run Code Online (Sandbox Code Playgroud)

a创建按钮,b删除它,但是当我在b上调用时,它说"NoneType对象没有属性破坏"

我该如何正确地做到这一点?

python user-interface tkinter widget destroy

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

Tkinter OptionMenu命令异常

我想创建一个在更改时OptionMenu编辑另一个的tkinter OptionMenu.所以我尝试创建一个command=参数,使得每次更新时都会运行一个特定的命令OptionMenu,就像我将command=参数用于按钮,旋转框等时一样.

tl.wktype = OptionMenu(tl,wktypevar, *wk_types,command=typeupdate)
Run Code Online (Sandbox Code Playgroud)

代码中的其他位置是typeupdate()Command - 用于调试目的.

def typeupdate():
    typeval = tl.wktype.get()
    print(typeval)
Run Code Online (Sandbox Code Playgroud)

python抛出的异常如下:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "C:\Python33\lib\tkinter\__init__.py", line 3300, in __call__
    self.__callback(self.__value, *args)
TypeError: typeupdate() takes 0 positional arguments but 1 was given
Run Code Online (Sandbox Code Playgroud)

确实typeupdate()给出了什么位置参数以及如何解决这个问题?

python exception tkinter optionmenu

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

tkinter'NonType'对象没有属性'pack'(仍然有效?)

我是Python的新手,刚刚开始使用tkinter.运行下面的代码我得到一个属性错误but1.pack()(NoneType对象没有属性pack).但据我所知,这个错误对窗口的功能没有任何影响,它仍然pack是按钮.窗口仍然出现,所有按钮都按预期运行.

搜索我可以看到其他人有这个错误,但没有给出的答案解决了我的问题.希望你能提供帮助.

代码:

import tkinter
import ctypes
lst=[]

user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

def closewindow():
    window.destroy()
def btn1():
    lst.append("Button1")
def btn2():
    lst.append("Button2")

window = tkinter.Tk()

size = str(screensize[0])+'x'+str(screensize[1])
window.geometry(size)

but1 = tkinter.Button(window, text="Button1", command=btn1).grid(column = 1, row = 1)
but2 = tkinter.Button(window, text="Button2", command=btn2).grid(column = 2, row = 1)
ext = tkinter.Button(window, text="Stop", command=closewindow).grid(column = 3, row = 1)

but1.pack()
but2.pack()
ext.pack()

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

回调;

Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python windows windows-xp tkinter python-3.x

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

如何获取Tkinter小部件属性?

我创建了一个Button,并设置了它的回调,但是如何获得按钮的属性fg呢?

from Tkinter import *

def callback(self):
    tkMessageBox.showinfo("button", color)

top = Tk()
frame = Frame(top)
frame.pack()

greenbutton = Button(frame, text="Brown", fg="brown", command=callback)
greenbutton.pack( side = RIGHT )

bluebutton = Button(frame, text="Blue", fg="blue", command=callback)
bluebutton.pack( side = LEFT )

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

我只想点击蓝色按钮,它会告诉我它是蓝色的.

python tkinter

0
推荐指数
2
解决办法
6963
查看次数

如何在Tkinter中显示图像?

这是我目前的计划:

from tkinter import *
from tkinter import messagebox
from collections import deque


class App():

    def __init__(self, *images):
        self.root = Tk()
        self.root.title("Disease")
        self.root.bind("<Button-1>", self.click_event)

        self.image_dict = {image: PhotoImage(file=image) for image in images}
        self.image_queue = deque(images)

        start_image = self.image_dict[self.image_queue[0]]
        self.label = Label(self.root, image=start_image)
        self.label.image = start_image
        self.label.pack()

    def change_image(self):
        self.image_queue.rotate(-1)
        next_image = self.image_queue[0]
        self.label.configure(image=self.image_dict[next_image])
        self.label.image = self.image_dict[next_image]

    def click_event(self, event):
        print ("clicked at", event.x, event.y )
        if (8 < event.x < 241) and (150 < event.y < 232):
            messagebox.showinfo("Description", "- Also …
Run Code Online (Sandbox Code Playgroud)

python image tkinter messagebox

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

NameError:未定义名称'tkFileDialog'

我正在尝试使用Tkinter并让用户选择某个文件.我的代码看起来像这样(我刚刚开始使用Tkinter)

from Tkinter import *
from tkFileDialog import *


root = Tk()

root.wm_title("Pages to PDF")
root.wm_iconbitmap('icon.ico')
w = Label(root, text="Please choose a .pages file to convert.") 
y = tkFileDialog.askopenfilename(parent=root)
y.pack()
w.pack()

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

当我运行程序时,我收到一条错误消息:

NameError: name 'tkFileDialog' is not defined
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些我在网上找到的配置.他们都没有工作; 但每次都是同样的基本错误.我怎样才能解决这个问题?

python tkinter file-browser python-2.7

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