python中用tkinter实现时遇到困难
昨天学了些tkinter毛皮,今天想动手只做个软件可以输入文本,输入正则表达式,输出结果
如图,text1是待处理的原始文本,text2是输入的正则表达式,text3是输出结果的地方
我代码问题有点多,先把逻辑写完了
遇到了第一个问题,text3文本显示错误
接着测试功能,又出现了第二个错误
正则取不出内容,程序报错
匹配不出信息先不说
根据错误信息“chars”,我怀疑是正则返回的re1是列表,我赋值给了var而导致的
于是,我进行修改
接着修改,继续报错
实在不晓得咋改了,过来请教
两个问题:
1,正则表达式匹配问题,成不成功全看脸。。是不是正则表达式的字符串不能正确传给text2呢?
正则里还一个group函数问题,啥时候可以用group,啥时候不能用
2,碰巧正则匹配成功,但是也不能传给text3,text3显示不出来的问题。。text3全程看戏,没用
百度上搜出的问题答案,全是一大片,说不到点上,所以来吾爱问问
大小毛病都可以指出,虚心请教
本帖最后由 随遇而安8 于 2020-7-3 10:46 编辑
importtkinter as tk
import re
root = tk.Tk()
root.title('正则')
var=tk.StringVar()
var.set("还没开始转换...")
def fun():
txt1 = text1.get('0.0','end')
txt2 = text2.get('0.0','end')
print(txt1,txt2)
text3s=re.findall(text2,text1)
for x in text3s:
print(x)
#将结果赋给var变量
var.get(x)
text3.insert(tk.END,var)
#text1用来接收待处理文本
text1=tk.Text(root,height=10,width=30)
text1.grid(row=1,column=0)
label=tk.Label(root,text="请输入正则文本:")
label.grid(row=0,column=0)
#text2用来接收正则表达式
text2=tk.Text(root,height=1,width=20,bg='yellow',fg='blue')
text2.grid(row=0,column=1)
button=tk.Button(height=5,width=10,text="开始转换",command=fun)
button.grid(row=1,column=1)
#text3用来显示匹配后的结果
text3=tk.Text(root,height=10,width=30)
text3.insert(tk.END,var)
text3.grid(row=2,column=0)
root.mainloop()
我也不懂,楼主解决了能回复我一下么
我感觉的原理
text3s=re.findall(text1,text2)
for x in text3s:
text3.insert(x,end='\n') 用self更新数据吧 本帖最后由 ywqn 于 2020-7-3 12:52 编辑
import tkinter as tk
import re
# -*- encoding: utf8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import Toplevel
import tkinter.filedialog
from tkinter import messagebox
import tkinter.simpledialog
import os
from tkinter import *
from hashlib import md5
import re
import textwrap
import tkinter.font as tkFont
import random
# root = tk.Tk()
# root.title('正则')
#
# var = tk.StringVar()
# var.set("还没开始转换...")
#
#
#
# def fun():
# txt1 = text1.get('0.0', 'end')
# txt2 = text2.get('0.0', 'end')
# print(txt1, txt2)
# text3s = re.findall(text2, text1)
# for x in text3s:
# print(x)
# # 将结果赋给var变量
# var.get(x)
# text3.insert(tk.END, var)
#
#
# # text1用来接收待处理文本
# text1 = tk.Text(root, height=10, width=30)
# text1.grid(row=1, column=0)
#
# label = tk.Label(root, text="请输入正则文本:")
# label.grid(row=0, column=0)
#
# # text2用来接收正则表达式
# text2 = tk.Text(root, height=1, width=20, bg='yellow', fg='blue')
# text2.grid(row=0, column=1)
#
# button = tk.Button(height=5, width=10, text="开始转换", command=fun)
# button.grid(row=1, column=1)
#
# # text3用来显示匹配后的结果
# text3 = tk.Text(root, height=10, width=30)
# text3.insert(tk.END, var)
# text3.grid(row=2, column=0)
#
# root.mainloop()
class Editor:
def __init__(self, master):
self.master = master
self.master.title("正则")
self.frame = tk.Frame(self.master)
#
self.frame.grid()
text1 = tk.Text(self.frame, height=10, width=30)
text1.grid(row=1, column=0)
#
label = tk.Label(self.frame, text="请输入正则文本:")
label.grid(row=0, column=0)
#
## text2用来接收正则表达式
text2 = tk.Text(self.frame, height=1, width=20, bg='yellow', fg='blue')
text2.grid(row=0, column=1)
#
button = tk.Button(height=5, width=10, text="开始转换", command=lambda: self.fun())
button.grid(row=1, column=1)
# text3用来显示匹配后的结果
global text3
text3 = tk.Text(self.frame, height=10, width=30)
# text3.insert(tk.END, var)
text3.grid(row=2, column=0)
def fun(self, value):
txt1 = str(value).strip()
txt2 = str(value).strip()
print(txt1)
print(txt2)
text3s = re.findall(txt2, txt1)
for x in text3s:
print(type(x))
print(x)
text3.delete(1.0,'end')
text3.insert('1.0', x)
def main():
root = tk.Tk()
app = Editor(root)
# 设置窗口大小
winWidth = 600
winHeight = 600
# 获取屏幕分辨率
screenWidth = root.winfo_screenwidth()
screenHeight = root.winfo_screenheight()
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)
# 设置窗口初始位置在屏幕居中
root.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
#root.geometry("600x600+10+15")
# 设置窗口图标
#root.iconbitmap("./icons/Create.ico")
root.mainloop()
if __name__ == '__main__':
main() 本帖最后由 井右寺 于 2020-7-3 08:40 编辑
group用于正则分组啊 比如 r'({3})+({3})', group(0)就是第一个括号匹配到的内容
还有,正则最好判断一下结果是否为None
可以好好看一下re模块
2、你的var不能插入文本啊,它是一个类。。。。
*.insert(var.get())
另外,后台逻辑不要放在主线程里面做,不然看起来程序死了一样 Zeaf 发表于 2020-7-2 22:41
我也不懂,楼主解决了能回复我一下么
我感觉的原理
text3s=re.findall(text1,t ...
我试了一下,还是报错,代码贴出来了,您可以试一下 ywqn 发表于 2020-7-3 00:32
class Employee:
'所有员工的基类'
empCount = 0
您是我老哥。。。代码贴出来了,您能帮我看看吗 Clinton 发表于 2020-7-2 22:43
用self更新数据吧
我是新手,不太懂,您可以帮我修改成self吗,我学习一下 https://www.52pojie.cn/thread-1074755-1-1.html
虽然有时候会闪退,但你值得拥有
页:
[1]
2