会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132885个问题

from tkinter import *  # 引用tkinter模块
from tkinter.filedialog import *  # 引用对话框
from tkinter.colorchooser import *  # 引用颜色选择器

win_width = 900
win_height = 500


class Application(Frame):
    def __init__(self, master=None, bgcolor="#000000"):
        super().__init__(master)
        self.master = master
        self.bgcolor = bgcolor
        self.fgcolor = "#ff0000"
        self.x = 0
        self.y = 0
        self.lastDraw = 0  # 表示最后绘制的图形的 id
        self.startDrawFlag = False
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.drawpad = Canvas(root, width=win_width, height=win_height * 0.9, bg=self.bgcolor)
        self.drawpad.pack()

        btn_pen = Button(root, text="画笔", name="pen")
        btn_pen.pack(side="left", padx="10")
        btn_line = Button(root, text="直线", name="line")
        btn_line.pack(side="left", padx="10")

        btn_pen.bind_class("Button", "<1>", self.eventManager)
        self.drawpad.bind(("<ButtonRelease-1>", self.stopDraw))

    def eventManager(self, event):
        name = event.widget.winfo_name()
        print(name)
        if name == "line":
            self.drawpad.bind("<B1-Motion>", self.myline)

    def stopDraw(self, event):
        self.startDrawFlag = False
        self.lastDraw = 0

    def myline(self, event):

        self.drawpad.delete(self.lastDraw)
        
        if not self.startDrawFlag:
            self.startDrawFlag = True
            self.x = event.x
            self.y = event.y

        self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)


if __name__ == '__main__':
    root = Tk()
    root.title("酥酥的画架")
    root.geometry(str(win_width) + "x" + str(win_height) + "+200+100")
    app = Application(master=root)
    root.mainloop()

111.png老师麻烦帮我看一下,卡在“释放鼠标后构建新的直线”这一步上。stopDraw代码没找到有什么问题,但结论效果出不来


Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 35492楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 35494楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库 35495楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 35496楼
人工智能/第六阶段:机器学习-线性分类/SVM支持向量机算法 35497楼
JAVA 全系列/第四阶段:网页编程和设计/Javascript 语言(旧) 35498楼
Python 全系列/第七阶段:Web全栈开发基础与前端/jQuery 35499楼

# encoding=utf-8
print(rf"{'程序开始':*^120}")
from random import choice, randint
from typing import Optional, Union
from sqlalchemy import Table, create_engine, text,ForeignKey,Column,String,Text,DECIMAL,Enum,Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
url=rf"mysql+pymysql://root:root@localhost:3306"
enginesqlalchemy=create_engine(url=url)
connection_sqlalchemy=enginesqlalchemy.connect()
databasename="sgz"
connection_sqlalchemy.execute(statement=text(text=rf"create database if not exists {databasename} default character set utf8;"))
connection_sqlalchemy.close()
engine_sqlalchemy=create_engine(url=rf'{url}/{databasename}')
sessionClassSqlalchemy=sessionmaker(bind=engine_sqlalchemy)
session_sqlalchemy=sessionClassSqlalchemy()
BaseclassSqlalchemy=declarative_base()
# 建立操作Table对象需要用的连接(session_sqlalchemy只适用于orm模型,而Table对象不是orm模型)
connecttionsqlalchemy=engine_sqlalchemy.connect()
#  region
# class MiddleTable(BaseclassSqlalchemy):
#     """_summary_
#     Args:
#         BaseclassSqlalchemy (_type_): _description_
#     """    
#     __tablename__="中间表"
#     ip=Column(Integer,primary_key=True,autoincrement=True,default=0,name="序号")
#     uip=Column(Integer,ForeignKey(column=rf"主表.序号"),primary_key=True)
#     uuip=Column(Integer,ForeignKey(column=rf"副表.序号"),primary_key=True)
#     def __repr__(self):
#         """_summary_

#         Returns:
#             _type_: _description_
#         """        
#         return rf"<ip:{self.ip} uip:{self.uip} uuip:{self.uuip}>"
# endregion
MiddleTable=Table("多对多中间表",BaseclassSqlalchemy.metadata,
                  Column(Integer,primary_key=True,autoincrement=True,name="序号"),
                Column(Integer,ForeignKey(column=f"主表.序号",ondelete="CASCADE"),primary_key=True,name="主表外键"),
                  Column(Integer,ForeignKey(column=f"副表.序号",ondelete="CASCADE"),primary_key=True,name="副表外键"))

class MainTable(BaseclassSqlalchemy):
    """_summary_
    Args:
        BaseclassSqlalchemy (_type_): _description_
    """    
    __tablename__="主表"
    ip=Column(Integer,primary_key=True,autoincrement=True,name="序号")
    name=Column(String(length=255),name="姓名")
    introduction=Column(Text(length=65535),name="生平")
    region=Column(Enum("汉","魏","蜀","吴","晋","乌桓","鲜卑","匈奴","羌","氐",
                       "羯","山越","南蛮"),name="地区")
    subordianterelationship=relationship(argument="SubordianteTable",
                                         secondary=MiddleTable,
                                         backref=backref(name="mainbackreference",uselist=False),uselist=False)
    def __repr__(self):
        """_summary_

        Returns:
            _type_: _description_
        """        
        return rf"<ip:{self.ip} name:{self.name} introduction:{self.introduction} region:{self.region}>"

class SubordianteTable(BaseclassSqlalchemy):
    """_summary_
    Args:
        BaseclassSqlalchemy (_type_): _description_
    """
    __tablename__="副表"
    ip=Column(Integer,primary_key=True,autoincrement=True,name="序号")
    price=Column(DECIMAL(precision=12,scale=2),name="价值",default=0)
    def __repr__(self):
        """_summary_

        Returns:
            _type_: _description_
        """        
        return rf"<ip:{self.ip} price:{self.price}>"

BaseclassSqlalchemy().metadata.create_all(bind=engine_sqlalchemy)

maininstances=[]
subordinateinstances=[]
middleinstances=[]
for i in range(1,20):
    maindata=MainTable(name=rf"姓名{i}",introduction=rf"介绍{i}",
                       region=choice(seq=("汉","魏","蜀","吴","晋","乌桓",
                                          "鲜卑","匈奴","羌","氐","羯","山越","南蛮")))
    maininstances.append(maindata)
    subordinatedata=SubordianteTable(price=randint(a=i,b=i*100000))
    subordinateinstances.append(subordinatedata)



# print(f"{'maininstances':★^120}\n{maininstances}")
# print(f"{'subordinateinstances':★^120}\n{subordinateinstances}")
# print(f"{'middleinstances':★^120}\n{middleinstances}")


def add_data_by_Table():
    """_summary_

    Returns:
        _type_: _description_
    """    
    session_sqlalchemy.add_all(instances=maininstances)
    session_sqlalchemy.add_all(instances=subordinateinstances)
    session_sqlalchemy.commit()

    for maindata,subordinatedata in zip(maininstances,subordinateinstances):
        middledata = MiddleTable.insert().values(主表外键=maindata.ip, 副表外键=subordinatedata.ip)
        connecttionsqlalchemy.execute(middledata)
        connecttionsqlalchemy.commit()

    return None

def query_data_by_table(filtercondition_parameter:Optional[Union[str,int]])->any:
    """_summary_

    Args:
        filtercondition_parameter (Optional[str,int]): _description_

    Returns:
        any: _description_
    """    
    results_maintable=session_sqlalchemy.query(MainTable).filter(MainTable.ip>filtercondition_parameter).all()
    print(f"{'副表结果--来自主表查询':*^120}")
    # print(results_maintable)
    for result in results_maintable:
        print(result.subordianterelationship)
    results_subordiantetable=session_sqlalchemy.query(SubordianteTable).filter(SubordianteTable.ip>filtercondition_parameter).all()
    print(f"{'主表结果--来自副表查询':*^120}")
    # print(results_subordiantetable)
    for result in results_subordiantetable:
        print(result.mainbackreference)
   
    return results_maintable,results_subordiantetable


add_data_by_Table()

query_data_by_table(filtercondition_parameter=0)

session_sqlalchemy.close()
connection_sqlalchemy.close()
connecttionsqlalchemy.close()

if __name__=="__main__":
    print(rf"{'程序结束':*^120}")

老师好,以上是我的代码,运行后遇到一个奇怪的bug,GPT-4也解决不了:代码不会报错,能正常运行,但是第一次运行后无法显示任何结果,第二次运行只能显示第一次操作时添加的数据,第三次运行只能显示上一轮操作后的结果

您能帮忙看下问题吗

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 35502楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 35503楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 35504楼
微服务/第十八阶段:分布式解决方案/分布式事务 35505楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637