win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版

news2024/11/24 16:31:07

搞了两天才搞清楚跑通 好难呢,个人电脑 win10 ,6GB显存

个人感觉 生成速度很慢,数学能力不怎么行 没有ChatGLM2-6B 强,逻辑还行,

要求: 

我的部署流程

1.下载模型

,下载所有文件 然后 放到新建的model目录

https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits/tree/main

2.创建环境 安装依赖

用conda创建一个新环境取名baichuan2

安装 requirements.txt 模块依赖

torch >=2.0.0
deepspeed==0.9.2
numpy==1.23.5
sentencepiece==0.1.97
xformers==0.0.19
bitsandbytes==0.41.1
accelerate
colorama
streamlit
transformers_stream_generator
cpm_kernels

其他的.时间原因我都忘记了
我的环境 的所有包如下你可以参考一下
 

$ conda list
# packages in environment at C:\Users\Administrator\.conda\envs\baichuan2:
#
# Name                    Version                   Build  Channel
absl-py                   1.4.0                    pypi_0    pypi
accelerate                0.23.0                   pypi_0    pypi
addict                    2.4.0                    pypi_0    pypi
aiofiles                  23.1.0                   pypi_0    pypi
aiohttp                   3.8.5                    pypi_0    pypi
aiosignal                 1.3.1                    pypi_0    pypi
aliyun-python-sdk-core    2.13.36                  pypi_0    pypi
aliyun-python-sdk-kms     2.16.2                   pypi_0    pypi
altgraph                  0.17.3                   pypi_0    pypi
appdirs                   1.4.4                    pypi_0    pypi
async-timeout             4.0.2                    pypi_0    pypi
attrs                     23.1.0                   pypi_0    pypi
bitsandbytes              0.41.1                   pypi_0    pypi
blas                      1.0                         mkl    https://repo.anaconda.com/pkgs/main
bzip2                     1.0.8                h8ffe710_4    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
ca-certificates           2023.01.10           haa95532_0    defaults
cachetools                5.3.1                    pypi_0    pypi
certifi                   2022.12.7                pypi_0    pypi
cffi                      1.15.1                   pypi_0    pypi
chardet                   5.1.0                    pypi_0    pypi
charset-normalizer        3.1.0                    pypi_0    pypi
click                     8.1.3                    pypi_0    pypi
colorama                  0.4.6                    pypi_0    pypi
contourpy                 1.1.0                    pypi_0    pypi
cpm-kernels               1.0.11                   pypi_0    pypi
crcmod                    1.7                      pypi_0    pypi
cryptography              41.0.3                   pypi_0    pypi
cycler                    0.11.0                   pypi_0    pypi
datasets                  2.13.0                   pypi_0    pypi
diffusers                 0.21.1                   pypi_0    pypi
dill                      0.3.6                    pypi_0    pypi
einops                    0.6.1                    pypi_0    pypi
exceptiongroup            1.1.1                    pypi_0    pypi
faker                     8.8.1              pyhd3eb1b0_1    defaults
ffmpy                     0.3.0                    pypi_0    pypi
filelock                  3.10.0                   pypi_0    pypi
fonttools                 4.40.0                   pypi_0    pypi
frozenlist                1.3.3                    pypi_0    pypi
fsspec                    2023.6.0                 pypi_0    pypi
gast                      0.5.4                    pypi_0    pypi
google-auth               2.23.0                   pypi_0    pypi
google-auth-oauthlib      1.0.0                    pypi_0    pypi
grpcio                    1.58.0                   pypi_0    pypi
h11                       0.14.0                   pypi_0    pypi
huggingface-hub           0.17.1                   pypi_0    pypi
icetk                     0.0.5                    pypi_0    pypi
idna                      3.4                      pypi_0    pypi
importlib-metadata        6.8.0                    pypi_0    pypi
intel-openmp              2021.4.0          haa95532_3556    https://repo.anaconda.com/pkgs/main
jieba                     0.42.1                   pypi_0    pypi
jinja2                    3.1.2                    pypi_0    pypi
jmespath                  0.10.0                   pypi_0    pypi
jsonschema                4.17.3                   pypi_0    pypi
kiwisolver                1.4.4                    pypi_0    pypi
latex2mathml              3.76.0                   pypi_0    pypi
libffi                    3.4.2                h8ffe710_5    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
libsqlite                 3.40.0               hcfcfb64_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
libzlib                   1.2.13               hcfcfb64_4    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
linkify-it-py             2.0.2                    pypi_0    pypi
m2w64-gcc-libgfortran     5.3.0                         6    https://repo.anaconda.com/pkgs/msys2
m2w64-gcc-libs            5.3.0                         7    https://repo.anaconda.com/pkgs/msys2
m2w64-gcc-libs-core       5.3.0                         7    https://repo.anaconda.com/pkgs/msys2
m2w64-gmp                 6.1.0                         2    https://repo.anaconda.com/pkgs/msys2
m2w64-libwinpthread-git   5.0.0.4634.697f757               2    https://repo.anaconda.com/pkgs/msys2
markdown                  3.4.3                    pypi_0    pypi
markdown-it-py            2.2.0                    pypi_0    pypi
markupsafe                2.1.2                    pypi_0    pypi
matplotlib                3.7.1                    pypi_0    pypi
mdtex2html                1.2.0                    pypi_0    pypi
mdurl                     0.1.2                    pypi_0    pypi
mkl                       2021.4.0           haa95532_640    https://repo.anaconda.com/pkgs/main
mkl-service               2.4.0           py310h2bbff1b_0    https://repo.anaconda.com/pkgs/main
mkl_fft                   1.3.1           py310ha0764ea_0    https://repo.anaconda.com/pkgs/main
mkl_random                1.2.2           py310h4ed8f06_0    https://repo.anaconda.com/pkgs/main
modelscope                1.9.1                    pypi_0    pypi
mpmath                    1.3.0                    pypi_0    pypi
ms-swift                  1.0.0                    pypi_0    pypi
msys2-conda-epoch         20160418                      1    https://repo.anaconda.com/pkgs/msys2
multidict                 6.0.4                    pypi_0    pypi
multiprocess              0.70.14                  pypi_0    pypi
mypy-extensions           1.0.0                    pypi_0    pypi
networkx                  3.0                      pypi_0    pypi
numpy                     1.24.2                   pypi_0    pypi
numpy-base                1.23.5          py310h04254f7_0    https://repo.anaconda.com/pkgs/main
oauthlib                  3.2.2                    pypi_0    pypi
openssl                   3.1.0                hcfcfb64_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
orjson                    3.9.1                    pypi_0    pypi
oss2                      2.18.1                   pypi_0    pypi
packaging                 23.0                     pypi_0    pypi
pandas                    2.0.3                    pypi_0    pypi
pefile                    2023.2.7                 pypi_0    pypi
peft                      0.5.0                    pypi_0    pypi
pillow                    9.4.0                    pypi_0    pypi
pip                       23.2.1                   pypi_0    pypi
platformdirs              3.10.0                   pypi_0    pypi
protobuf                  4.24.3                   pypi_0    pypi
psutil                    5.9.5                    pypi_0    pypi
pyarrow                   13.0.0                   pypi_0    pypi
pyasn1                    0.5.0                    pypi_0    pypi
pyasn1-modules            0.3.0                    pypi_0    pypi
pycparser                 2.21                     pypi_0    pypi
pycryptodome              3.19.0                   pypi_0    pypi
pydantic                  1.10.10                  pypi_0    pypi
pydub                     0.25.1                   pypi_0    pypi
pygments                  2.15.1                   pypi_0    pypi
pyinstaller               5.9.0                    pypi_0    pypi
pyinstaller-hooks-contrib 2023.1                   pypi_0    pypi
pyparsing                 3.1.0                    pypi_0    pypi
pyre-extensions           0.0.29                   pypi_0    pypi
pyrsistent                0.19.3                   pypi_0    pypi
python                    3.10.2          hcf16a7b_4_cpython    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
python-dateutil           2.8.2              pyhd3eb1b0_0    defaults
python-multipart          0.0.6                    pypi_0    pypi
pytz                      2023.3                   pypi_0    pypi
pywin32-ctypes            0.2.0                    pypi_0    pypi
pyyaml                    6.0                      pypi_0    pypi
regex                     2022.10.31               pypi_0    pypi
requests                  2.28.2                   pypi_0    pypi
requests-oauthlib         1.3.1                    pypi_0    pypi
rsa                       4.9                      pypi_0    pypi
safetensors               0.3.3                    pypi_0    pypi
scipy                     1.11.2                   pypi_0    pypi
semantic-version          2.10.0                   pypi_0    pypi
sentencepiece             0.1.97                   pypi_0    pypi
setuptools                68.2.2                   pypi_0    pypi
simplejson                3.19.1                   pypi_0    pypi
six                       1.16.0             pyhd3eb1b0_1    https://repo.anaconda.com/pkgs/main
sniffio                   1.3.0                    pypi_0    pypi
sortedcontainers          2.4.0                    pypi_0    pypi
sqlite                    3.40.0               hcfcfb64_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
sympy                     1.11.1                   pypi_0    pypi
tensorboard               2.14.0                   pypi_0    pypi
tensorboard-data-server   0.7.1                    pypi_0    pypi
text-unidecode            1.3                pyhd3eb1b0_0    defaults
thulac                    0.2.2                    pypi_0    pypi
tk                        8.6.12               h8ffe710_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
tokenizers                0.13.2                   pypi_0    pypi
tomli                     2.0.1                    pypi_0    pypi
toolz                     0.12.0                   pypi_0    pypi
torch                     2.0.0+cu117              pypi_0    pypi
torchvision               0.15.1                   pypi_0    pypi
tqdm                      4.65.0                   pypi_0    pypi
transformers              4.33.2                   pypi_0    pypi
typing-extensions         4.7.0                    pypi_0    pypi
typing-inspect            0.9.0                    pypi_0    pypi
tzdata                    2023.3                   pypi_0    pypi
uc-micro-py               1.0.2                    pypi_0    pypi
ucrt                      10.0.22621.0         h57928b3_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
unicodecsv                0.14.1                   pypi_0    pypi
unihan-etl                0.18.1                   pypi_0    pypi
urllib3                   1.26.15                  pypi_0    pypi
uvicorn                   0.22.0                   pypi_0    pypi
vc                        14.3                hb6edc58_10    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
vs2015_runtime            14.34.31931         h4c5c07a_10    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
websockets                11.0.3                   pypi_0    pypi
werkzeug                  2.3.7                    pypi_0    pypi
wheel                     0.40.0             pyhd8ed1ab_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
word2vec                  0.9.4           py310h9909e9c_0    https://repo.anaconda.com/pkgs/main
xformers                  0.0.19                   pypi_0    pypi
xxhash                    3.3.0                    pypi_0    pypi
xz                        5.2.6                h8d14728_0    http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
yapf                      0.40.1                   pypi_0    pypi
yarl                      1.9.2                    pypi_0    pypi
zhon                      1.1.5                    pypi_0    pypi
zipp                      3.16.2                   pypi_0    pypi

3.运行代码

下载代码包 解压 GitHub - baichuan-inc/Baichuan2: A series of large language models developed by Baichuan Intelligent Technology

新建一个run.py文件,放到解压的源码文件夹,以及  model 目录也移到过去

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
import os

# 获取当前文件所在的目录路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将当前目录和'model'连接起来,获得'model'文件夹的完整路径
model_path = os.path.join(current_dir, 'model')
print('model_path=', model_path)


if __name__ == '__main__':
    tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False, trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
    model.generation_config = GenerationConfig.from_pretrained(model_path)
    messages = []
    messages.append({"role": "user", "content": "解释一下“温故而知新”"})
    response = model.chat(tokenizer, messages)
    print(response)

在创建一个run.bat文件


call activate baichuan2

python ./run.py

pause

双击run.bat 就运行模型了

生成效果

你好
AI:你好今天我能为您提供什么帮助?

numbers由几个字母组成?
AI:是由五个字母组成的单词。

将"numbers"这个字符串进行倒序输出:
AI: 输出结果为:"dsna"

小明45元卖出一顶帽子,收到一张100元假钞,找零55元,帽子进货价15元一顶,如果小明不知道他收到的是一张假钞,请问小明亏了多少钱?
AI: 首先,我们需要计算小明卖帽子的总收入。他收到了100元的假钞,所以实际上他收到的现金是90元(100 - 55 = 90)。然后,他以45元的价格卖出了这顶帽子,所以收入为45元。
现在我们来计算小明的亏损。他进货成本是一顶帽子的价格,即15元。他卖出的帽子收入是45元,进货成本也是15元,所以他实际亏损了(45 - 15)元,即30元。

改正语句:你到看的时一片精菜的说小,描了述小王在禛上遇道阿sir的故式。
AI: 当你看到的时候,描述小王在桌子上遇到阿sir的情景。

用5个1怎么计算得到6?
AI: 你可以使用以下数学运算来从五个1中计算出6:

1. 加法:将五个1相加,即 1 + 1 + 1 + 1 + 1 = 5。然后从结果中减去1(因为已经有一个1了),得到4。最后加上1,得到最终结果5 。所以,通过加法得到的答案是5。

2. 减法:从六个数(6 = 5 + 1)中减去五个1,得到一个1。所以,通过减法得到的答案是1。

3. 乘法:将五个1相乘,即 1 * 1 * 1 * 1 * 1 = 1。所以,通过乘法得到的答案是1。

4. 除法:将六个数(6 = 5 + 1)除以五个1,得到一个1。所以,通过除法得到的答案是1。

请注意,这些计算方法都得到了相同的答案:1。这意味着在五种情况下,你都可以通过将五个1相加或相乘来得到6。


有一串彩珠,按2红3绿4黄的顺序依次排列,第600颗是什么颜色?
AI:首先,我们需要找到这600个彩珠中的第600颗。因为每个周期有8个彩珠(2红3绿4黄),所以600个彩珠可以分为8个这样的周期。因此,我们只需将600除以8,得到75,即有75个完整的周期。

现在我们知道第600颗彩珠位于一个完整的周期中。这个周期的顺序是2红3绿4黄,所以我们可以通过以下步骤来确定第600颗彩珠的颜色 :

1. 首先,我们确定第600颗彩珠是否在红色区域。如果它在红色区域,那么它就是红色的;否则,它必须在绿色或黄色的区域。

2. 如果第600颗彩珠在红色区域,那么它是一个2红。由于我们有75个完整的周期,这意味着第600颗彩珠是这75个2红中的某一个。但是 ,我们不能直接确定它是第600颗2红,因为我们还需要知道每个周期内2红的顺序。

3. 为了确定第600颗彩珠是第几颗2红,我们需要计算75个2红在顺序上的位置。由于每个周期都有8个彩珠,所以每个2红占据了一个完整的周期的一半。因此,75个2红占据了75/2=37.5个完整周期。由于我们不能有半个周期,我们需要向上取整,这意味着实际上有38个完整周期包含2红。

4. 现在我们已经确定了第600颗彩珠是这38个2红中的某一个。要确定它是第几颗2红,我们需要计算38个2红在顺序上的位置。由于每个2红都占据了一个完整周期的半数,所以38个2红占据了38*2=76个完整周期的半数。由于每个周期有8个彩珠,所以38个2红占据了38/2=19 个完整周期的数量。

5. 最后,我们需要计算19个完整周期的顺序。由于每个周期都有8个彩珠,所以19个完整周期的数量等于19*8=152个彩珠。这意味着第600颗彩珠是这152个彩珠中的某一个。要确定它是第几颗彩珠,我们需要计算152个彩珠在顺序上的位置。由于每个彩珠都是一个单独的单 元,所以我们只需要计数即可。从0开始计数,第600颗彩珠的位置就是152。

综上所述,第600颗彩珠是黄色。


列出最常见的20中水果名称
AI:
1.苹果 (Apple)
2. 香蕉 (Banana)
3. 橙子 (Orange)
4. 葡萄 (Grape)
5. 西瓜 (Watermelon)
6. 柠檬 (Lemon)
7. 草莓 (Strawberry)
8. 菠萝 (Pineapple)
9. 樱桃 (Cherry)
10. 猕猴桃 (Kiwi)
11. 火龙果 (Dragon Fruit)
12. 柿子 (Fig)
13. 桃子 (Peach)
14. 李子 (Apricot)
15. 杏子 (Almond)
16. 石榴 (Pomegranate)
17. 木瓜 (Papaya)
18. 芒果 (Mango)
19. 蓝莓 (Blueberry)
20. 黑莓 (Blackberry)

用户:0 - 187 次
1 - 100 次
2 - 225 次
3 - 128 次
4 - 64 次
5 - 92 次
6 - 69 次
7 - 206 次
8 - 127 次
9 - 65 次
按次数从大到小排序
------------------------------------------------------------------------------
AI:根据您提供的数据,我已经将它们按照次数从大到小排序:

1 - 100 次
2 - 225 次
3 - 128 次
4 - 64 次
5 - 92 次
6 - 69 次
7 - 206 次
8 - 127 次
9 - 65 次
0 - 187 次
==============================================================================


用户:7年前,妈妈的年龄是儿子的6倍,儿子今年12岁,妈妈今年几岁?
------------------------------------------------------------------------------
AI:这是一个关于线性方程的问题。在这个问题中,我们需要找到一个方程来表示父母和孩子的年龄关系,然后通过给定的条件求解出母亲的年龄。
首先,我们知道儿子的年龄是12岁。7年前,他的年龄是5岁(因为7年前妈妈的年龄是他的6倍,所以那时她的年龄是 5 * 6 = 30岁)。现在,儿子已经12岁了,所以我们可以得出一个方程:
母亲的年龄 = 儿子的年龄 + 7
==============================================================================


用户:以“会心之乐”为题的600字作文
------------------------------------------------------------------------------
AI:会心之乐

在这个快节奏的现代社会,人们往往被各种压力所困扰,生活的压力让我们忘记了如何去欣赏生活中的美好。然而,当我们学会去发现生活中的美好时,我们会发现一种叫做“会心之乐”的东西。它如同阳光般温暖人心,如同清泉般滋润心灵。

会心之乐,是一种发自内心的喜悦。它源于我们对生活的热爱,对自然的敬畏,对他人的关爱。当我们看到孩子天真烂漫的笑容时,我们会心一笑,这就是会心之乐;当我们看到一对恋人手牵手漫步在夕阳下时,我们会心一笑,这也是会心之乐。会心之乐,是一种简单而美好的情感,它让我们感受到生活的美好,让我们更加珍惜当下。

会心之乐,是一种心灵的慰藉。在这个纷繁复杂的世界里,我们往往会因为各种琐事而烦恼,但是当我们找到一种让自己放松的方式时,我们会心一笑,这就是会心之乐。无论是阅读一本好书,还是聆听一首美妙的歌曲,亦或是品尝一道美味的佳肴,都会让我们感受到会心之乐。这种快乐,让我们在面对困难时,更加坚定信心,让我们在疲惫时,更加热爱生活。

会心之乐,是一种成长的体验。成长的过程中,我们会遇到各种各样的挑战,但是当我们克服这些挑战时,我们会心一笑,这就是会心之乐。无论是学习一门新技能,还是完成一个艰巨的任务,我们都会在这个过程中感受到会心之乐。这种快乐,让我们更加珍惜每一个成长的时刻,让我们更加感激每一个陪伴我们的人。

会心之乐,是一种友谊的见证。在这个世界上,有一种感情叫做友谊,它如同阳光一般温暖人心。当我们与朋友分享喜悦,分担痛苦时,我们会心一笑,这就是会心之乐。这种快乐,让我们更加珍惜身边的朋友,让我们更加懂得彼此的陪伴。

总之,会心之乐是一种源自内心的喜悦,是一种心灵的慰藉,是一种成长的体验,是一种友谊的见证。它让我们更加热爱生活,更加珍惜当下,更加感激每一个陪伴我们的人。让我们学会去发现生活中的美好,去感受会心之乐,让我们的生活变得更加美好。

GUI版本代码

,没有历史功能,懒得研究了

import tkinter as tk
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
import os


# 获取当前文件所在的目录路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将当前目录和'model'连接起来,获得'model'文件夹的完整路径
model_path = os.path.join(current_dir, 'model')
print('model_path=', model_path)


tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
model.generation_config = GenerationConfig.from_pretrained(model_path)



def write_file(text):
    with open(save_path, 'a', encoding='utf-8') as f:
        f.write(text + '\n')
        
history=[]
def answer(question):
    global history
    history=[]
    history.append({"role": "user", "content": question})
    response = model.chat(tokenizer, history)
    print(f"Response from model: {response}")  # Add this line for debugging
    return response


# 创建主窗口
root = tk.Tk()
root.title("Baichuan2")
root.geometry("800x600+{}+{}".format(root.winfo_screenwidth() // 2 - 400, root.winfo_screenheight() // 2 - 350))

# 创建输入框和滚动条
input_frame = tk.Frame(root)

clear_button = tk.Button(root, text="清空", width=6, height=3)


def clear_output():
    global history
    output_text.delete("1.0", tk.END)
    history=[]



clear_button.config(command=clear_output)
clear_button.pack(side="right", padx=60)

# 创建输出框和滚动条
output_frame = tk.Frame(root)
output_label = tk.Label(output_frame, text="AI:")
output_text = tk.Text(output_frame, height=26, width=87, padx=6, pady=6)
output_scrollbar = tk.Scrollbar(output_frame)
output_text.config(yscrollcommand=output_scrollbar.set)
output_scrollbar.config(command=output_text.yview)
output_label.pack(side="left", pady=10)
output_text.pack(side="left", pady=10)
output_scrollbar.pack(side="right", fill="y")
output_frame.pack()

output_text.tag_config("user", foreground='green')
output_text.tag_config("ai", background='orange', foreground='white')


input_label = tk.Label(input_frame, text="用户:")
input_text = tk.Text(input_frame, height=10, width=67, padx=6, pady=6)
input_scrollbar = tk.Scrollbar(input_frame)
input_text.config(yscrollcommand=input_scrollbar.set)
input_scrollbar.config(command=input_text.yview)
input_label.pack(side="left")
input_text.pack(side="left", pady=10)
input_scrollbar.pack(side="right", fill="y")
input_frame.pack()


def show_text():
    # 清空 Tkinter Text 组件中的文本
    # output_text.delete('1.0', 'end')
    question = input_text.get("1.0", "end-1c")
    result = answer(question)
    output_text.insert("end", "用户:" + question, "user")
    output_text.insert("end", "\n" + '-'*78)
    output_text.insert("end", "\nAI:" + result)
    output_text.insert("end", '\n'+"="*78)
    output_text.insert("end", "\n\n\n")
    # 滚动到最底部
    output_text.yview_moveto(1.0)
    input_text.delete('1.0', 'end')


# 创建按钮
button_frame = tk.Frame(root)
button = tk.Button(button_frame, text="回答", command=show_text, width=6, height=3)
# 响应回车键 绑定 <Return> 事件
root.bind("<Return>", lambda event: show_text())


def copy():
    global text
    text.event_generate("<<Copy>>")


def cut():
    global text
    text.event_generate("<<Cut>>")


def paste():
    global text
    text.event_generate("<<Paste>>")


# 创建右键菜单
menu = tk.Menu(root, tearoff=0)
menu.add_command(label="复制", command=copy)
menu.add_command(label="剪切", command=cut)
menu.add_command(label="粘贴", command=paste)


# 绑定鼠标右键(第一个文本框)
def show_menu1(event):
    global text
    text = input_text
    menu.post(event.x_root, event.y_root)


input_text.bind("<Button-3>", show_menu1)


# 绑定鼠标右键(第二个文本框)
def show_menu2(event):
    global text
    text = output_text
    menu.post(event.x_root, event.y_root)


output_text.bind("<Button-3>", show_menu2)

button.pack(side="right", padx=60)
button_frame.pack()

root.lift()
# 运行主循环
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题-数组-二分查找总结

前言 二分查找的使用前提/一般何时想到使用二分查找&#xff1a;数组为有序数组、数组中重复元素&#xff08;因为一旦有重复元素&#xff0c;使用二分查找法返回的元素下标可能不是唯一的&#xff09; 二分查找的关键 / 不容易写混乱的关键 / 谨记的不变量&#xff1a;区间定…

【大数据之Kafka】十六、Kafka集成外部系统之集成Flume

Flume 是一个在大数据开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以用于 Kafka 的消费者。 Flume安装和部署&#xff1a;https://blog.csdn.net/qq_18625571/article/details/131678589?spm1001.2014.3001.5501 1 Flume生产者 &#xff08;1&#xff09…

绿色科技:可持续发展的创新解决方案

标题绿色科技&#xff1a;可持续发展的创新解决方案 摘要引言绿色能源创新1. 太阳能和风能2. 储能技术 可再生资源管理3. 智能农业4. 循环经济 智能城市的未来5. 智能交通6. 城市感知 可持续生活方式7. 可持续建筑8. 智能家居 总结参考资料 博主 默语带您 Go to New World. ✍ …

短视频矩阵系统,短视频矩阵源码技术开发

开发短视频矩阵系统的源码需要以下步骤&#xff1a; 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的整体架构&#x…

用户与权限管理

文章目录 用户与权限管理1. 用户管理1.1 MYSQL用户1.2 登录MySQL服务器1.3 创建用户1.4 修改用户1.5 删除用户1.6 修改密码1. 修改当前用户密码2. 修改其他用户密码 1.7 MYSQL8密码管理 2. 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 3. 权限…

C语言文件的相关操作

C语言中文件的相关操作 文件的打开 使用文件的打开函数需要引入这个头文件&#xff1a;#include <fcntl.h> open函数 int open(char const *pathname, int flags, mode_t mode) 功能&#xff1a;打开已有的文件或者创建新文件参数 pathname&#xff1a;文件路径名&…

IDEA开发工具技巧

1.1 IDEA相关插件 idea插件下载地址&#xff1a;https://plugins.jetbrains.com/ 开发必装插件&#xff1a; &#xff08;1&#xff09; 快速查找api接口 RestfulTool 插件&#xff0c;推荐指数⭐⭐⭐⭐⭐ [RestfulTool搜索插件使用详解](https://blog.csdn.net/weixin_450147…

java面向对象(九)

文章目录 一、abstract的应用举例二、接口的使用1.概念2.代码案例 三、try-catch-finally使用步骤1.注意点2.finally注意点 四、异常处理的方式二&#xff1a;throws 异常类型1.如图所示&#xff1a;2.代码如下&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…

如何通过一键导出导入数据实现批量重命名文件名称

在日常办公中&#xff0c;我们经常需要对大量的文件进行重命名&#xff0c;以便更好地管理和查找文件。而且&#xff0c;有时候我们还需要将文件名称翻译成其他语言&#xff0c;以适应不同的工作需求。如何高效地完成这项任务呢&#xff1f;接下来&#xff0c;我将介绍一种方法…

How AI can revolutionise science AI如何彻底改变科学 | 经济学人20230916版双语精翻

本期重磅推荐&#xff1a;2023年9月16日《经济学人》封面文章双语精读&#xff1a;How AI can revolutionise science&#xff08;《AI将如何彻底改变科学》&#xff09; How AI can revolutionise science AI将如何彻底改变科学 The technology is being applied in many fiel…

基于Yolov8的工业端面小目标计数检测(1)

1.端面小目标计数数据集介绍 工业端面小目标计数类别:一类,类别名object 数据集大小:训练集864张,验证集98张 缺陷特点:小目标计数,检测难度大,如下图所示; 1.1 小目标定义 1)以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于3232个像素点(中物体是指…

SSM - Springboot - MyBatis-Plus 全栈体系(十二)

第二章 SpringFramework 六、Spring 声明式事务 1. 声明式事务概念 1. 编程式事务 编程式事务是指手动编写程序来管理事务&#xff0c;即通过编写代码的方式直接控制事务的提交和回滚。在 Java 中&#xff0c;通常使用事务管理器(如 Spring 中的 PlatformTransactionManage…

使用注解方式和XML配置方式完成AOP编程

第一种方式:基于注解 beanx10.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http:/…

Vue中如何封装组件,如何进行跨组件通信

封装组件和跨组件通信是Vue.js中非常重要的概念&#xff0c;它们有助于构建模块化、可维护和可扩展的应用程序。本文将深入讨论如何在Vue中封装组件以及如何实现跨组件通信&#xff0c;同时提供示例代码来帮助您更好地理解这些概念。 第一部分&#xff1a;Vue组件的封装 在V…

负载均衡在线oj

1.项目源码&#x1f339;load-balanced-online-oj fortianyang/project - 码云 - 开源中国 (gitee.com) 2.相关技术⭐ ⭕C STL 标准库 ⭕Boost 准标准库(字符串切割) ⭕cpp-httplib 第三方开源网络库 ⭕ctemplate 第三方开源前端网页渲染库 ⭕jsoncpp 第三方开源序列化、…

Linux下git安装及使用

Linux下Git使用 1. git的安装 sudo apt install git安装完&#xff0c;使用git --version查看git版本 2. 配置git git config --global user.name "Your Name“ ##配置用户 git config --global user.email emailexample.com ##配置邮箱git config --global --list …

MySQL学习笔记1

任务背景&#xff1a; 将原来的数据库从原来的MySQL-5.5 升级到现在的MySQL-5.7&#xff0c;并保证数据完整。 1&#xff09;不同版本MySQL的安装&#xff1b;yum glibc、源码安装&#xff0c;是企业100%要用到的。 2&#xff09;MySQL数据库版本升级&#xff1b;&#xff08…

【电源专题】明明芯片是写了能恒流充电,但为什么实际恒流充电电流在慢慢下降?

本案例发生在两个不同产品做对比时发现了差异。其实两个产品使用的 充电芯片是一致的,但是实际测试的情况下产品一在恒流充电过程中,电流正常保持,而产品二在恒流充电过程中电流在慢慢下降。 那么是不是说明产品二有什么问题呢?本来应该恒定电流充电的,为什么充电电流还能…

机器学习入门:从算法到实际应用

机器学习入门&#xff1a;从算法到实际应用 机器学习入门&#xff1a;从算法到实际应用摘要引言机器学习基础1. 什么是机器学习&#xff1f;2. 监督学习 vs. 无监督学习 机器学习算法3. 线性回归4. 决策树和随机森林 数据准备和模型训练5. 数据预处理6. 模型训练与调优 实际应用…

腾讯云16核服务器性能测评_轻量和CVM配置大全

腾讯云16核服务器配置大全&#xff0c;CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等&#xff0c;目前标准型S5云服务器有优惠活动&#xff0c;性价比高&#xff0c;计算型C6云服务器16核性能更高&#xff0c;轻量16核32G28M带宽优惠价3468元15个月&#xff0c;…