我正在编写一个'向导'类型的Python Tkinter GUI,它从用户收集信息,然后根据用户的条目执行多个操作:文件复制,数据库更新等.处理通常需要30-60秒,在此期间,我想要:
我开始将文本更新显示在子窗口中,该子窗口被配置为trainsient并wait_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之前我可以激活其他方法.
如果我能找到一种方法,那么次要问题(防止用户在工作完成之前关闭子窗口)将在下面的答案中介绍.
那么......有什么样的绑带可以申请让这种方法按我想要的方式工作吗?或者我需要废弃它,因为它无法正常工作?(如果是后者,有什么方法可以实现最初的目标吗?)
我在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 3.3中的tkinter模块.我对此比较新,我正在使用输入框.出于某种原因,当我运行以下代码时,我收到一条错误消息,指出AttributeError:'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版本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)
请帮我解决这个问题.
我试图创建一个功能,创建并在屏幕上放置一个按钮(带网格),按钮的命令将自行删除(或任何其他小部件),但我没有这样做.
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对象没有属性破坏"
我该如何正确地做到这一点?
我想创建一个在更改时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的新手,刚刚开始使用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) 我创建了一个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)
我只想点击蓝色按钮,它会告诉我它是蓝色的.
这是我目前的计划:
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) 我正在尝试使用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 ×10
tkinter ×10
python-2.7 ×2
python-3.x ×2
windows ×2
destroy ×1
exception ×1
file-browser ×1
image ×1
messagebox ×1
optionmenu ×1
radio-button ×1
widget ×1
windows-7 ×1
windows-xp ×1