Tkinter忙着闲逛,想知道是否有一种方法可以创建一个具有可变数量拐角的多边形?我正在尝试编写一个程序,其中涉及用户输入一定数量的坐标,然后在画布上绘制具有这些点边缘的多边形。由于我不知道用户将输入的值的数量,因此不可能为每种可能性编写代码,那么这真的可能吗?
canvas.create_polygon(x1,y1,x2,y2...xn,yn,fill="black")
Run Code Online (Sandbox Code Playgroud) 从这里的第一个答案: StackOverflow#6548837 我可以在用户键入时调用回调:
from Tkinter import *
def callback(sv):
print sv.get()
root = Tk()
sv = StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
e = Entry(root, textvariable=sv)
e.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
但是,该事件发生在每个键入的字符上。当用户完成键入并按下Enter键或Entry小部件失去焦点(即用户单击其他位置)时,如何调用事件?
简而言之,两者之间有什么区别
tkFileDialog.asksaveasfile
Run Code Online (Sandbox Code Playgroud)
和
tkFileDialog.asksaveasfilename
Run Code Online (Sandbox Code Playgroud)
我无法从文档中的构建中了解
我正在尝试通过使用类来制作一个小程序.到目前为止,我已经创建了两个类,其中第一个将运行下一个类.当我运行它时,我收到一条错误消息.我不明白什么是错的,但看起来它有一些关于我Menu1在读取之前定义名称的事情.我将在这些类之后创建一个新函数,它将首先运行MainWindow,然后再运行Menu1.我很感激帮助.
码:
class MainWindow:
app = Tk()
app.title("MyApp")
window = Frame(app, width=1050, height=550)
app.minsize(width=1050, height=550)
window.pack()
menu = Menu1()
menu.makeMenu()
app.mainloop()
class Menu1:
def makeMenu(self):
app.config(menu=menu)
menu.add_cascade(label="Settings", menu=subMenu)
subMenu.add_command(label="Settings", command=settings1)
def settings1():
print("Open new window")
if __name__ == "__main__":
MainWindow()
Run Code Online (Sandbox Code Playgroud)
错误信息:
Traceback (most recent call last):
File "", line 7, in <module>
class MainWindow:
File "", line 13, in MainWindow
menu = Menu1()
NameError: name 'Menu1' is not defined
Process finished with exit code …Run Code Online (Sandbox Code Playgroud) 我在使用Python(3.5)中的ttk / tkinter搞砸了,而按钮也遇到了一些问题(特别是ttk.Button)。
无论我尝试什么,都无法终生获得图像显示在按钮上。
我有以下代码:
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
class Example(ttk.Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
master.title('Button Test')
self.configure(padding='10 10 10 10')
self.grid(column=0, row=0, sticky=(N, E, W, S))
buttonImage = Image.open('play.png')
buttonPhoto = ImageTk.PhotoImage(buttonImage)
myButton = ttk.Button(self, image=buttonPhoto, padding='10 10 10 10')
myButton.grid(column=1, row=1, sticky=(E, W))
if __name__ == "__main__":
root = Tk()
example = Example(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这是我在此处,此处以及在StackOverflow上的用户中找到的示例的组合。
预先感谢您的任何想法/见解。
-西恩
我正在尝试调用一个类函数,它将一些文本写入Tkinter的控制台窗口.
但是,当我尝试运行它.我收到以下错误.
TypeError: write() missing 1 required positional argument: 'txt'
Run Code Online (Sandbox Code Playgroud)
这是我的完整代码:
main.py
from tkinter import *
from tkinter.filedialog import askdirectory
import os
import nam
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("Source Data Checker")
self.pack(fill=BOTH, expand=1)
self.pathLabel = Label(text='Select the location of the source data below and press "Generate Excel"')
self.pathLabel.place(x=110, y=40)
self.selectFolderButton = Button(self, text='Select Folder', command=self.openfile)
self.selectFolderButton.place(x=180, y=350)
self.executeButton= Button(self, text='Generate Excel', command=self.run)
self.executeButton.config(state=DISABLED)
self.executeButton.place(x=330, y=350)
self.outputWindow = Text()
self.outputWindow.place(x=100, …Run Code Online (Sandbox Code Playgroud) 在Tkinter尝试我的手,只想添加一个简单的Text字段.我已经能够添加Entry,Button和Label而Text导致的问题.这是我有的Text:
import Tkinter
class myapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.about = Tkinter.Text(self)
self.about.insert(INSERT, "Hello World!")
self.about.grid(row=0, column=0)
if __name__ == '__main__':
myapp = myapp_tk(None)
myapp.title("My First App!")
myapp.mainloop()
Run Code Online (Sandbox Code Playgroud)
收到错误:
NameError: global name 'INSERT' is not defined
我已经改变了脚本标题以包含from Tkinter import *哪个会强制它,但我很好奇为什么没有这个改变它不起作用.
我正在试图找出如何.csv在tkinter的网格中显示文件,但是没有找到很多在线.
这是我有多远.
import tkinter
root = tkinter.Tk()
for r in range(3):
for c in range(4):
tkinter.Label(root, text='R%s/C%s'%(r,c),borderwidth=1 ).grid(row=r,column=c)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我如何.csv使用相同的方法读取文件?
这是一个简单的数学游戏.感兴趣的功能是checkAnswer().我正在尝试更新,label1以便标签使用新的str更新,而不是连续打印多个标签.
错误:
AttributeError:'str'对象没有属性'set'
from tkinter import *
from random import randint
num1 = 0
num2 = 0
userAnswer = 0
answer = 0
score = 0
labeltext = ""
#PROGRAM FUNCTIONS
def question():
global num1, num2
global answer
num1 = randint(1,10)
num2 = randint(1,10)
question = Label(text = "What is " + str(num1)+ " + " + str(num2) + "?").pack()
answer = num1+num2
print(answer) #testing purposes
def userAnswer():
global userAnswer
userAnswer = IntVar()
entry = Entry(root, …Run Code Online (Sandbox Code Playgroud) 伙计我正在使用sqlite3和python tkinter作为前端.数据库很简单,有两个字段,用户名和密码.我想进行注册注册页面.其中两个字段中给出的数据存储在sqlite3数据库中.数据正确插入.但是,当数据库中已存在提供的用户名时,我想显示一个消息框.我尝试了下面的代码.
我的代码:
def signup():
userID = username.get()
passwd = password.get()
conn = sqlite3.connect('test.db')
c = conn.cursor()
result = c.execute("SELECT * FROM userstable")
for i in result:
if i[0] == userID:
messagebox.showerror("DUPLICATE", "USER ALREADY EXISTS!")
else:
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("INSERT INTO userstable VALUES (?, ?)", (userID, passwd))
conn.commit()
c.close()
conn.close()
username.delete(0,END)
password.delete(0,END)
username.focus()
messagebox.showinfo("SUCCESS", "USER CREATED SUCCESSFULLY")
Run Code Online (Sandbox Code Playgroud)
这可以工作,但仍然会在错误消息之后存储重复数据.如果用户名已经可用,我的要求是抛出错误并停止执行.如果用户名不可用,则应插入数据.
我哪里错了?有人可以通过指出来解释我,还是有其他方法可以达到这个目的?看来我需要修改一些功能.请指导我.
编辑1
如果我尝试使用三个条件,则休息不起作用.
我的代码
def data_entry():
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('CREATE TABLE IF …Run Code Online (Sandbox Code Playgroud) python ×10
tkinter ×10
python-2.7 ×2
callback ×1
class ×1
csv ×1
events ×1
grid ×1
imagebutton ×1
python-3.5 ×1
python-3.x ×1
sqlite ×1
ttk ×1