python基础—图形开发
前言:
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,新星计划云原生领域Top5
📝📝此专栏文章是专门针对Python零基础,欢迎免费订阅!
🎈🎈欢迎大家一起学习,一起成长!!
学习目标✍️✍️:
Python图形界面开发是指使用Python语言来创建图形用户界面(GUI)应用程序的过程。图形用户界面可以提供更友好的交互方式,使用户可以通过点选、拖拽、输入等方式与应用程序进行交互,而不是通过命令行等方式。
Python是一种流行的编程语言,它有很多用于图形用户界面(GUI)开发的库和框架。以下是一些常用的Python GUI开发工具:
Tkinter:Python自带的GUI开发工具包,可以创建简单的GUI应用程序。2. PyQt:一个基于Qt库的Python GUI开发工具包,提供了丰富的GUI组件和功能。
wxPython:基于wxWidgets库的Python GUI开发工具包,可以创建跨平台的GUI应用程序。4.PyGTK:基于GTK+库的Python GUI开发工具包,可以创建跨平台的GUI应用程序。
5.Kivy:一个跨平台的Python GUI开发框架,专注于创建移动应用程序和多点触控应用程序。
📜📜今天我们来学习tkinter模块📜📜
Tkinter是Python自带的GUI工具包,它是一个跨平台的工具包,可以在Windows、Linux和MacOS等操作系统上运行。Tkinter是基于Tk GUI工具包的Python接口,TkGUI工具包是一个用于创建GUI应用程序的工具包,最初是为Tcl语言设计的,后来被移植到了其他语言中,包括Python。
使用Tkinter,可以快速地创建GUI应用程序,Tkinter提供了一系列的GUI组件,如按钮、标签、文本框、滚动条、列表框等,可以通过这些组件来构建GUI界面。Tkinter还提供了一些布局管理器,可以更方便地管理和布局GUI组件。
以下是一个使用Tkinter创建简单GUI应用程序的示例代码:
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=self.master.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
这个示例创建了一个窗口,包含一个按钮和一个退出按钮。单击“Hello
World”按钮,将在控制台中打印一条消息。单击退出按钮,将关闭应用程序。
运行结果:

在Tkinter中,窗体被称为顶层窗口(Toplevel),可以通过创建一个Toplevel对象来创建一个窗体。可以使用Toplevel对象的方法和属性来对窗体进行基本设置。
以下是一些常用的窗体设置方法:
1. 设置窗体标题:可以使用Toplevel对象的title()方法来设置窗体标题
win = tk.Toplevel()
win.title("My Window")
2. 设置窗体大小:可以使用Toplevel对象的geometry()方法来设置窗体的大小
win = tk.Toplevel()
win.geometry("400x300")
3. 设置窗体位置:可以使用Toplevel对象的geometry()方法来设置窗体的位置
win = tk.Toplevel()
win.geometry("+100+100")
其中,第一个加号后面的数字表示窗体距离屏幕左边缘的像素数,第二个加号后面的数字表示窗体距离屏幕上边缘的像素数。
4. 设置窗体图标:可以使用Toplevel对象的iconbitmap()方法来设置窗体的图标
win = tk.Toplevel()
win.iconbitmap("myicon.ico")
其中,myicon.ico是窗体图标的文件名。
5. 窗体的最大化和最小化:可以使用Toplevel对象的state()方法来设置窗体的状态
win = tk.Toplevel()
win.state("zoomed") # 最大化窗体
win.state("iconic") # 最小化窗体
其中,"zoomed"表示最大化窗体,"iconic"表示最小化窗体。
通过这些方法,可以对窗体进行基本设置,使窗体更符合实际需求。
在Tkinter中,有三种常用的几何布局管理器:
pack布局管理器:
按照添加组件的顺序自动排列,可以设置方向、填充和间隔等参数。
grid布局管理器:
可以将组件放置在一个网格中,可以设置行列的大小和位置,以及组件之间的间隔。
place布局管理器:
可以通过设置组件的绝对位置和大小来进行布局,适用于需要精确布局的场景。
不同的布局管理器适用于不同的场景,需要根据具体需求进行选择。
pack布局管理器是tkinter模块中用于布局的一种方式,它会自动将组件(如按钮、标签等)按照指定的方向(上、下、左、右)排列,并根据组件的大小和容器的大小自动调整组件的位置和大小。
使用pack布局管理器,可以通过指定多个参数来控制组件的排列方式和位置,例如:
下面是一个简单的例子,演示如何使用pack布局管理器来排列两个按钮:
import tkinter as tk
root = tk.Tk()
btn1 = tk.Button(root, text="Button 1")
btn1.pack(side=tk.LEFT, padx=10, pady=10)
btn2 = tk.Button(root, text="Button 2")
btn2.pack(side=tk.RIGHT, padx=10, pady=10)
root.mainloop()
运行结果:

在这个例子中,我们创建了一个包含两个按钮的窗口,并使用pack布局管理器将它们分别放置在窗口的左侧和右侧。我们还使用了padx和pady参数来指定按钮的外边距大小,使它们之间有一定的距离。
grid布局管理器是Tkinter中的一种布局管理器,它将窗口分成网格,可以在每个网格中放置控件。相比pack布局管理器,grid布局管理器更加灵活,可以更精细地控制控件的位置和大小。
使用grid布局管理器,需要先创建一个父容器,然后使用组件的grid()方法将子组件放置在父容器中的某个单元格中。
例如,以下代码创建了一个包含3个标签的窗口,使用grid布局管理器将它们放置在不同的单元格中:
import tkinter as tk
root = tk.Tk()
label1 = tk.Label(root, text="Label 1")
label1.grid(row=0, column=0)
label2 = tk.Label(root, text="Label 2")
label2.grid(row=1, column=0)
label3 = tk.Label(root, text="Label 3")
label3.grid(row=0, column=1, rowspan=2)
root.mainloop()
运行结果:

在这个例子中,label1和label2被放置在第1列的第1行和第2行,label3被放置在第2列的第1行和第2行。rowspan参数表示label3占据了两行的空间。
grid布局管理器还有其他参数,例如columnspan、sticky等,可以根据需要进行使用。
place布局管理器是Tkinter中的一种布局管理器,它可以让我们在窗口中精确地放置控件。使用place布局管理器,我们需要使用控件的x、y坐标来指定它的位置,以及width和height属性来指定控件的大小。
下面是一个简单的例子,演示如何使用place布局管理器来放置一个标签控件:
import tkinter as tk
root = tk.Tk()
# 创建一个标签控件
label = tk.Label(root, text="Hello World!")
# 使用place布局管理器来放置标签控件
label.place(x=50, y=50)
root.mainloop()
运行结果:

在这个例子中,我们创建了一个标签控件,并使用place布局管理器将其放置在窗口的坐标(50,50)处。
import tkinter as tk
class Calculator:
def __init__(self, master):
self.master = master
master.title("Calculator")
# 创建显示结果的文本框
self.display = tk.Entry(master, width=30, justify='right')
self.display.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
# 创建数字按钮
button_list = [
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+'
]
r = 1
c = 0
for b in button_list:
cmd = lambda x=b: self.click(x)
tk.Button(master, text=b, width=5, command=cmd).grid(row=r, column=c)
c += 1
if c > 3:
c = 0
r += 1
def click(self, key):
if key == '=':
result = eval(self.display.get())
self.display.delete(0, tk.END)
self.display.insert(tk.END, str(result))
elif key == 'C':
self.display.delete(0, tk.END)
else:
self.display.insert(tk.END, key)
root = tk.Tk()
calculator = Calculator(root)
root.mainloop()
运行结果:


这个程序创建了一个简单的计算器应用程序,包含数字按钮、运算符按钮、清除按钮和等于按钮。当用户点击数字按钮时,数字将显示在文本框中。当用户点击运算符按钮时,运算符将添加到文本框中。当用户点击等于按钮时,程序将计算文本框中的表达式并显示结果。当用户点击清除按钮时,文本框将被清空。
在Python中,事件处理是通过事件循环机制来实现的。事件循环是一个无限循环,它等待事件的发生,并且根据事件类型来执行相应的
操作。
在GUI编程中,事件循环是由GUI框架自动处理的,程序员只需要提供事件的处理函数即可。例如,在Tkinter中,可以通过绑定事件处理函数到控件上来处理相应的事件。
例如,下面的代码将一个函数绑定到按钮的点击事件上:
import tkinter as tk
def button_click():
print("Button clicked")
root = tk.Tk()
button = tk.Button(root, text="Click me", command=button_click)
button.pack()
root.mainloop()
当按钮被点击时,button_click函数将被调用并打印出一条信息。
除了GUI事件之外,Python还支持其他类型的事件处理,例如文件读写事件、网络事件等。这些事件的处理方式与GUI事件类似,也是通过事件循环机制来实现的。
1. Label:用于显示文本或图像。
from tkinter import *
root = Tk()
label = Label(root, text="Hello World!")
label.pack()
root.mainloop()

2. Button:用于创建按钮。
from tkinter import *
root = Tk()
def click():
print("Button clicked!")
button = Button(root, text="Click me", command=click)
button.pack()
root.mainloop()

3. Entry:用于输入单行文本。
from tkinter import *
root = Tk()
entry = Entry(root)
entry.pack()
root.mainloop()

4. Text:用于输入多行文本。
from tkinter import *
root = Tk()
text = Text(root)
text.pack()
root.mainloop()

5. Checkbutton:用于创建复选框。
from tkinter import *
root = Tk()
var = IntVar()
checkbutton = Checkbutton(root, text="Check me", variable=var)
checkbutton.pack()
root.mainloop()

6. Radiobutton:用于创建单选按钮。
from tkinter import *
root = Tk()
var = IntVar()
radiobutton1 = Radiobutton(root, text="Option 1", variable=var, value=1)
radiobutton2 = Radiobutton(root, text="Option 2", variable=var, value=2)
radiobutton1.pack()
radiobutton2.pack()
root.mainloop()

7. Scale:用于创建滑动条。
from tkinter import *
root = Tk()
scale = Scale(root, from_=0, to=100, orient=HORIZONTAL)
scale.pack()
root.mainloop()

8. Listbox:用于创建列表框。
from tkinter import *
root = Tk()
listbox = Listbox(root)
listbox.insert(1, "Item 1")
listbox.insert(2, "Item 2")
listbox.insert(3, "Item 3")
listbox.pack()
root.mainloop()

9. Menu:用于创建菜单。
from tkinter import *
root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
root.mainloop()

Label:用于显示文本和图像。
Message:类似于Label,但可以自动换行
Entry:用于输入单行文本。
Text:用于输入多行文本。
Scale:用于选择一个范围内的值。
Checkbutton:用于选择一个或多个选项。
Radiobutton:用于选择一项。
Listbox:用于显示一个列表。
Combobox:类似于Entry,但可以选择一个下拉列表中的值。
在Python中,可以使用Tkinter模块创建Listbox列表框组件。Listbox用于显示一列文本项,并允许用户从中选择一个或多个项。
以下是一个简单的例子:
import tkinter as tk
root = tk.Tk()
# 创建一个Listbox
listbox = tk.Listbox(root)
# 添加一些选项
listbox.insert(1, "选项1")
listbox.insert(2, "选项2")
listbox.insert(3, "选项3")
# 设置Listbox的位置和大小
listbox.pack(padx=10, pady=10)
root.mainloop()
在这个例子中,我们使用tk.Listbox()函数创建了一个Listbox组件,并使用insert()函数添加了一些选项。可以通过设置padx和pady参数来调整Listbox的位置和大小。
如果想获取用户选择的选项,可以使用curselection()函数。例如:
# 获取用户选择的选项
selected = listbox.curselection()
# 打印选择的选项
for index in selected:
print(listbox.get(index))
这将获取用户选择的选项的索引,并使用get()函数打印选项的文本值。
可以使用delete()函数删除选项。例如:
# 删除第二个选项
listbox.delete(2)
这将删除第二个选项(索引为2)。
还可以使用activate()函数设置默认选项。例如:
# 设置第一个选项为默认选项
listbox.activate(0)
这将设置第一个选项为默认选项,即在Listbox中显示为已选择。
🍁 🍁今日学习笔记到此结束,感谢你的阅读,如有疑问或者问题欢迎私信,我会帮忙解决,如果没有回,那我就是在教室上课,抱歉。
🍂🍂🍂🍂

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o